********************************************************* * * * DES: Datalog Educational System v.3.0 * * * * * * Type "/help" for help about commands * * Type "des." to continue if you get out of DES * * from a Prolog interpreter * * * * Fernando Saenz-Perez (c) 2004-2011 * * GPD DISIA UCM * * Please send comments, questions, etc. to: * * fernan@sip.ucm.es * * Web site: * * http://des.sourceforge.net/ * ********************************************************* DES> /process examples/SQLDebugger/awards2 Info: Processing file 'examples/SQLDebugger/awards2.sql' ... DES> -- SQL Debugger DES> -- November 2011 DES> -- Example 2 Awards DES> -- Wrong tuple 'Anna' DES> -- Refer to example2UserTrace.txt for a user trace and example2DevelopmentTrace.txt for a development trace DES> -- DES> -- Declarative Debugging of Wrong and Missing Answers for SQL Views DES> -- FLOPS 2012 DES> DES> /abolish DES> /multiline on DES> /development off Info: Development listings are already disabled. DES> -- Turn development on to inspect more info DES> -- /development on DES> /* Tables */ DES> DROP TABLE IF EXISTS grants, payment, registration, courses; DES> CREATE TABLE grants ( student varchar(45) DEFAULT NULL, amount integer default 0 ); DES> CREATE TABLE courses ( idcourses varchar(11) NOT NULL, style varchar(45) DEFAULT NULL, level int(11) DEFAULT NULL, teacher varchar(10) DEFAULT NULL, PRIMARY KEY (`idcourses`) ); DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c1', 'salsa', 1, 'teach1'); Info: 1 tuple inserted. DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c2', 'salsa', 2, 'teach2'); Info: 1 tuple inserted. DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c3', 'Merengue', 3, 'teach3'); Info: 1 tuple inserted. DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c4', 'salsa', 3, 'teach1'); Info: 1 tuple inserted. DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c5', 'salsa', 3, 'teach1'); Info: 1 tuple inserted. DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c6', 'salsa', 3, 'teach3'); Info: 1 tuple inserted. DES> INSERT INTO `courses` (`idcourses`, `style`, `level`, `teacher`) VALUES ('c7', 'salsa', 0, 'teach1'); Info: 1 tuple inserted. DES> CREATE TABLE registration ( idregistration int(11) NOT NULL, student varchar(45) DEFAULT NULL, course varchar(11) DEFAULT NULL, PRIMARY KEY (`idregistration`) ); DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (1, 'Juan', 'c1'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (2, 'Juan', 'c2'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (3, 'Juan', 'c6'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (4, 'Juan', 'c5'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (5, 'Pedro', 'c2'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (6, 'Ana', 'c1'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (7, 'Ana', 'c2'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (8, 'Ana', 'c5'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (9, 'Mica', 'c6'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (10, 'Juan', 'c7'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (11, 'Mica', 'c2'); Info: 1 tuple inserted. DES> INSERT INTO `registration` (`idregistration`, `student`, `course`) VALUES (12, 'Mica', 'c1'); Info: 1 tuple inserted. DES> CREATE TABLE payment ( `id` int(11) NOT NULL, `student` varchar(45) DEFAULT NULL, `state` varchar(11) DEFAULT NULL, PRIMARY KEY (`id`) ); DES> INSERT INTO `payment` (`id`, `student`, `state`) VALUES (1, 'Miguel', 'unpaid'); Info: 1 tuple inserted. DES> /* Views */ DES> /* Salsa courses */ DES> create or replace view salsaCourses(id, level, teacher) as select c.idcourses, c.level, c.teacher from courses c where c.style = 'salsa'; DES> /* Students of salsa courses */ DES> create or replace view salsaStudents(student, level, teacher) as select R.student, C.level, C.teacher from salsaCourses C, registration R where C.id = R.course; DES> /* Students of intensive course (level = 0) */ DES> create or replace view intensiveStudents(student) as select S.student from salsaStudents S where S.level = 0; DES> /* Students of first three courses with different teachers */ DES> /* This is the ill-defined view */ DES> create or replace view basicLevelStudents(student) as select a1.student from salsaStudents a1, salsaStudents a2, salsaStudents a3 where a1.student = a2.student and a2.student = a3.student and (a1.level = 1) and (a2.level = 2) and (a3.level = 3) and (a1.teacher <> a2.teacher) and (a2.teacher <> a3.teacher); DES> /* Students of basic level with different teachers and no intensive level */ DES> /* Two equivalent formulations below (the first one is not accepted by MySQL) */ DES> /*create or replace view candidates(student) as select student from basicLevelStudents except select student from intensiveStudents; */ DES> create or replace view candidates(student) as select student from basicLevelStudents where student not in ( select student from intensiveStudents); DES> /* Candidates with no past due payments */ DES> create or replace view awards(student) as select student from candidates c where c.student not in (select student from payment where state = 'unpaid') OR /* UNION */ c.student in (select student from grants); DES> Info: Batch file processed. DES> /verbose on Info: Verbose output is on. DES> /development on Info: Development listings are on. DES> /debug_sql awards Info: Question: all(awards) Info: Debugging view 'awards'. SELECT ALL c.student AS $a9 FROM candidates AS c WHERE ((c.student) NOT IN ( SELECT ALL $t0.student AS $a4 FROM payment AS $t0 WHERE $t0.state = 'unpaid' ) OR (c.student) IN ( SELECT ALL $t2.student AS $a7 FROM grants AS $t2 )); Info: Solving query awards(A)... Info: Computing by stratum of [awards_1_2(A),candidates_1_2(A)]. { 1 - awards('Ana'), 2 - awards('Mica') } Input: Is this the expected answer for view 'awards'? (y/n/m/mT/w/wN/a/h) [n]: w1 Info: processAnswer(all(awards),wrong(awards(Ana))) Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: Computing predicate dependency graph... Info: Computing strata... Info: Computing by stratum of [answer_1_2(A),candidates_1_2(A)]. Info: Processing: CREATE VIEW candidates_slice1(student) AS SELECT ALL * FROM candidates AS R WHERE EXISTS ( SELECT ALL candidates.student FROM candidates AS c WHERE (((c.student) NOT IN ( SELECT ALL $t0.student AS $a4 FROM payment AS $t0 WHERE $t0.state = 'unpaid' ) AND c.student = R.student) AND candidates.student = 'Ana') ); Info: Parsing query... Info: Query successfully parsed. Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: View created. Info: Computing predicate dependency graph... Info: Computing strata... Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: Computing predicate dependency graph... Info: Computing strata... Info: Computing by stratum of [candidates_1_2(A)]. Info: Initial logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). Info: Solving query basicLevelStudents(A)... Info: Solving query candidates(A)... Info: Computing by stratum of [candidates_1_2(A)]. Info: Solving query courses(A,B,C,D)... Info: Solving query grants(A,B)... Info: Solving query intensiveStudents(A)... Info: Solving query payment(A,B,C)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query candidates_slice1(A)... Info: Computing by stratum of [candidates_1_2(A),candidates_slice1_1_4(A)]. Info: Question: all(grants) Info: processAnswer(all(grants),valid) Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(grants),valid). Info: Solving query basicLevelStudents(A)... Info: Solving query candidates(A)... Info: Computing by stratum of [candidates_1_2(A)]. Info: Solving query courses(A,B,C,D)... Info: Solving query intensiveStudents(A)... Info: Solving query payment(A,B,C)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query candidates_slice1(A)... Info: Computing by stratum of [candidates_1_2(A),candidates_slice1_1_4(A)]. Info: Question: all(intensiveStudents) Info: Debugging view 'intensiveStudents'. SELECT ALL S.student AS $a4 FROM salsaStudents AS S WHERE S.level = 0; Info: Solving query intensiveStudents(A)... { 1 - intensiveStudents('Juan') } Input: Is this the expected answer for view 'intensiveStudents'? (y/n/m/mT/w/wN/a/h) [y]: Info: processAnswer(all(intensiveStudents),valid) Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). Info: Solving query basicLevelStudents(A)... Info: Solving query candidates(A)... Info: Computing by stratum of [candidates_1_2(A)]. Info: Solving query courses(A,B,C,D)... Info: Solving query payment(A,B,C)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query candidates_slice1(A)... Info: Computing by stratum of [candidates_1_2(A),candidates_slice1_1_4(A)]. Info: Question: all(payment) Info: processAnswer(all(payment),valid) Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). Info: Solving query basicLevelStudents(A)... Info: Solving query candidates(A)... Info: Computing by stratum of [candidates_1_2(A)]. Info: Solving query courses(A,B,C,D)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query candidates_slice1(A)... Info: Computing by stratum of [candidates_1_2(A),candidates_slice1_1_4(A)]. Info: Question: subset(candidates_slice1,candidates) Info: Solving query candidates_slice1(A)... Info: Computing by stratum of [candidates_1_2(A),candidates_slice1_1_4(A)]. Info: Debugging view 'candidates'. SELECT ALL $t2.student AS $a3 FROM basicLevelStudents AS $t2 WHERE ($t2.student) NOT IN ( SELECT ALL $t0.student AS $a1 FROM intensiveStudents AS $t0 ); Input: Should 'candidates' include a tuple of the form 'Ana'? (y/n/a) [y]: n Info: processAnswer(subset(candidates_slice1,candidates),wrong(candidates(Ana))) Info: processAnswer(all(candidates),wrong(candidates(Ana))) Info: Processing: CREATE VIEW basicLevelStudents_slice1(student) AS SELECT ALL * FROM basicLevelStudents AS R WHERE EXISTS ( SELECT ALL basicLevelStudents.student FROM basicLevelStudents AS $t2 WHERE ((($t2.student) NOT IN ( SELECT ALL $t0.student AS $a1 FROM intensiveStudents AS $t0 ) AND $t2.student = R.student) AND basicLevelStudents.student = 'Ana') ); Info: Parsing query... Info: Query successfully parsed. Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: View created. Info: Computing predicate dependency graph... Info: Computing strata... Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(candidates) :- state(subset(basicLevelStudents_slice1,basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(candidates),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). state(subset(candidates_slice1,candidates),nonvalid). Info: Solving query basicLevelStudents(A)... Info: Solving query courses(A,B,C,D)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query basicLevelStudents_slice1(A)... Info: Computing by stratum of [basicLevelStudents_slice1_1_4(A)]. Info: Question: subset(basicLevelStudents_slice1,basicLevelStudents) Info: Solving query basicLevelStudents_slice1(A)... Info: Computing by stratum of [basicLevelStudents_slice1_1_4(A)]. Info: Debugging view 'basicLevelStudents'. SELECT ALL a1.student AS $a20 FROM salsaStudents AS a1, salsaStudents AS a2, salsaStudents AS a3 WHERE ((((((a1.student = a2.student AND a2.student = a3.student) AND a1.level = 1) AND a2.level = 2) AND a3.level = 3) AND a1.teacher <> a2.teacher) AND a2.teacher <> a3.teacher); Input: Should 'basicLevelStudents' include a tuple of the form 'Ana'? (y/n/a) [y]: n Info: processAnswer(subset(basicLevelStudents_slice1,basicLevelStudents),wrong(basicLevelStudents(Ana))) Info: processAnswer(all(basicLevelStudents),wrong(basicLevelStudents(Ana))) Info: Processing: CREATE VIEW salsaStudents_slice1(student,level,teacher) AS SELECT ALL * FROM salsaStudents AS R WHERE EXISTS ( SELECT ALL salsaStudents.student FROM salsaStudents AS a1, salsaStudents AS a2, salsaStudents AS a3 WHERE ((((((((a1.student = a2.student AND a2.student = a3.student) AND a1.level = 1) AND a2.level = 2) AND a3.level = 3) AND a1.teacher <> a2.teacher) AND a2.teacher <> a3.teacher) AND (a1.student = R.student AND (a1.level = R.level AND a1.teacher = R.teacher))) AND salsaStudents.student = 'Ana') ); Info: Parsing query... Info: Query successfully parsed. Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: View created. Info: Computing predicate dependency graph... Info: Computing strata... Info: Processing: CREATE VIEW salsaStudents_slice2(student,level,teacher) AS SELECT ALL * FROM salsaStudents AS R WHERE EXISTS ( SELECT ALL salsaStudents.student FROM salsaStudents AS a1, salsaStudents AS a2, salsaStudents AS a3 WHERE ((((((((a1.student = a2.student AND a2.student = a3.student) AND a1.level = 1) AND a2.level = 2) AND a3.level = 3) AND a1.teacher <> a2.teacher) AND a2.teacher <> a3.teacher) AND (a2.student = R.student AND (a2.level = R.level AND a2.teacher = R.teacher))) AND salsaStudents.student = 'Ana') ); Info: Parsing query... Info: Query successfully parsed. Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: View created. Info: Computing predicate dependency graph... Info: Computing strata... Info: Processing: CREATE VIEW salsaStudents_slice3(student,level,teacher) AS SELECT ALL * FROM salsaStudents AS R WHERE EXISTS ( SELECT ALL salsaStudents.student FROM salsaStudents AS a1, salsaStudents AS a2, salsaStudents AS a3 WHERE ((((((((a1.student = a2.student AND a2.student = a3.student) AND a1.level = 1) AND a2.level = 2) AND a3.level = 3) AND a1.teacher <> a2.teacher) AND a2.teacher <> a3.teacher) AND (a3.student = R.student AND (a3.level = R.level AND a3.teacher = R.teacher))) AND salsaStudents.student = 'Ana') ); Info: Parsing query... Info: Query successfully parsed. Info: Compiling SQL statement to Datalog rules... Info: SQL statement successfully compiled. Info: View created. Info: Computing predicate dependency graph... Info: Computing strata... Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(basicLevelStudents) :- state(subset(salsaStudents_slice1,salsaStudents),valid), state(subset(salsaStudents_slice2,salsaStudents),valid), state(subset(salsaStudents_slice3,salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(candidates) :- state(subset(basicLevelStudents_slice1,basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(basicLevelStudents),nonvalid). state(all(candidates),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). state(subset(basicLevelStudents_slice1,basicLevelStudents),nonvalid). state(subset(candidates_slice1,candidates),nonvalid). Info: Solving query courses(A,B,C,D)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query salsaStudents_slice1(A,B,C)... Info: Solving query salsaStudents_slice2(A,B,C)... Info: Solving query salsaStudents_slice3(A,B,C)... Info: Question: subset(salsaStudents_slice1,salsaStudents) Info: Solving query salsaStudents_slice1(A,B,C)... Info: Debugging view 'salsaStudents'. SELECT ALL R.student AS $a8, C.level AS $a9, C.teacher AS $a10 FROM salsaCourses AS C, registration AS R WHERE C.id = R.course; Input: Should 'salsaStudents' include a tuple of the form 'Ana,1,teach1'? (y/n/a) [y]: Info: processAnswer(subset(salsaStudents_slice1,salsaStudents),valid) Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(basicLevelStudents) :- state(subset(salsaStudents_slice1,salsaStudents),valid), state(subset(salsaStudents_slice2,salsaStudents),valid), state(subset(salsaStudents_slice3,salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(candidates) :- state(subset(basicLevelStudents_slice1,basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(basicLevelStudents),nonvalid). state(all(candidates),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). state(subset(basicLevelStudents_slice1,basicLevelStudents),nonvalid). state(subset(candidates_slice1,candidates),nonvalid). state(subset(salsaStudents_slice1,salsaStudents),valid). Info: Solving query courses(A,B,C,D)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query salsaStudents_slice2(A,B,C)... Info: Solving query salsaStudents_slice3(A,B,C)... Info: Question: subset(salsaStudents_slice2,salsaStudents) Info: Solving query salsaStudents_slice2(A,B,C)... Info: Debugging view 'salsaStudents'. SELECT ALL R.student AS $a8, C.level AS $a9, C.teacher AS $a10 FROM salsaCourses AS C, registration AS R WHERE C.id = R.course; Input: Should 'salsaStudents' include a tuple of the form 'Ana,2,teach2'? (y/n/a) [y]: Info: processAnswer(subset(salsaStudents_slice2,salsaStudents),valid) Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(basicLevelStudents) :- state(subset(salsaStudents_slice1,salsaStudents),valid), state(subset(salsaStudents_slice2,salsaStudents),valid), state(subset(salsaStudents_slice3,salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(candidates) :- state(subset(basicLevelStudents_slice1,basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(basicLevelStudents),nonvalid). state(all(candidates),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). state(subset(basicLevelStudents_slice1,basicLevelStudents),nonvalid). state(subset(candidates_slice1,candidates),nonvalid). state(subset(salsaStudents_slice1,salsaStudents),valid). state(subset(salsaStudents_slice2,salsaStudents),valid). Info: Solving query courses(A,B,C,D)... Info: Solving query registration(A,B,C)... Info: Solving query salsaCourses(A,B,C)... Info: Solving query salsaStudents(A,B,C)... Info: Solving query salsaStudents_slice3(A,B,C)... Info: Question: subset(salsaStudents_slice3,salsaStudents) Info: Solving query salsaStudents_slice3(A,B,C)... Info: Debugging view 'salsaStudents'. SELECT ALL R.student AS $a8, C.level AS $a9, C.teacher AS $a10 FROM salsaCourses AS C, registration AS R WHERE C.id = R.course; Input: Should 'salsaStudents' include a tuple of the form 'Ana,3,teach1'? (y/n/a) [y]: Info: processAnswer(subset(salsaStudents_slice3,salsaStudents),valid) Info: Current logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(basicLevelStudents) :- state(subset(salsaStudents_slice1,salsaStudents),valid), state(subset(salsaStudents_slice2,salsaStudents),valid), state(subset(salsaStudents_slice3,salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(candidates) :- state(subset(basicLevelStudents_slice1,basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(basicLevelStudents),nonvalid). state(all(candidates),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). state(subset(basicLevelStudents_slice1,basicLevelStudents),nonvalid). state(subset(candidates_slice1,candidates),nonvalid). state(subset(salsaStudents_slice1,salsaStudents),valid). state(subset(salsaStudents_slice2,salsaStudents),valid). state(subset(salsaStudents_slice3,salsaStudents),valid). Info: Final logic program: buggy(awards) :- state(all(awards),nonvalid), state(all(candidates),valid), state(all(grants),valid), state(all(payment),valid). buggy(awards) :- state(subset(candidates_slice1,candidates),valid), state(all(payment),valid). buggy(basicLevelStudents) :- state(all(basicLevelStudents),nonvalid), state(all(salsaStudents),valid). buggy(basicLevelStudents) :- state(subset(salsaStudents_slice1,salsaStudents),valid), state(subset(salsaStudents_slice2,salsaStudents),valid), state(subset(salsaStudents_slice3,salsaStudents),valid). buggy(candidates) :- state(all(candidates),nonvalid), state(all(basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(candidates) :- state(subset(basicLevelStudents_slice1,basicLevelStudents),valid), state(all(intensiveStudents),valid). buggy(courses) :- state(all(courses),nonvalid). buggy(grants) :- state(all(grants),nonvalid). buggy(intensiveStudents) :- state(all(intensiveStudents),nonvalid), state(all(salsaStudents),valid). buggy(payment) :- state(all(payment),nonvalid). buggy(registration) :- state(all(registration),nonvalid). buggy(salsaCourses) :- state(all(salsaCourses),nonvalid), state(all(courses),valid). buggy(salsaStudents) :- state(all(salsaStudents),nonvalid), state(all(registration),valid), state(all(salsaCourses),valid). state(all(awards),nonvalid). state(all(basicLevelStudents),nonvalid). state(all(candidates),nonvalid). state(all(grants),valid). state(all(intensiveStudents),valid). state(all(payment),valid). state(subset(basicLevelStudents_slice1,basicLevelStudents),nonvalid). state(subset(candidates_slice1,candidates),nonvalid). state(subset(salsaStudents_slice1,salsaStudents),valid). state(subset(salsaStudents_slice2,salsaStudents),valid). state(subset(salsaStudents_slice3,salsaStudents),valid). Info: Buggy view found: basicLevelStudents Info: View 'candidates_slice1' dropped. Info: View 'basicLevelStudents_slice1' dropped. Info: View 'salsaStudents_slice1' dropped. Info: View 'salsaStudents_slice2' dropped. Info: View 'salsaStudents_slice3' dropped. DES>