From c205595ea805c0a921c1d4593d25ca9d1c682c9e Mon Sep 17 00:00:00 2001 From: Bernhard Scholz Date: Wed, 30 Mar 2022 14:08:19 +1100 Subject: [PATCH 1/4] Fix bug in subsumption for pathological cases --- src/ast/transform/MinimiseProgram.cpp | 4 ++++ src/ram/utility/Utils.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/ast/transform/MinimiseProgram.cpp b/src/ast/transform/MinimiseProgram.cpp index 2b966fb3077..571fa97cf91 100644 --- a/src/ast/transform/MinimiseProgram.cpp +++ b/src/ast/transform/MinimiseProgram.cpp @@ -377,6 +377,10 @@ bool MinimiseProgramTransformer::reduceClauseBodies(TranslationUnit& translation bool changed = false; for (auto* clause : program.getClauses()) { + if (isA(clause)) { + break; + } + auto bodyLiterals = clause->getBodyLiterals(); // TODO: This is n^2. Add AST hashing and use a hash-set. std::set redundantPositions; diff --git a/src/ram/utility/Utils.h b/src/ram/utility/Utils.h index cf6c2dfcf27..703171a9800 100644 --- a/src/ram/utility/Utils.h +++ b/src/ram/utility/Utils.h @@ -84,6 +84,9 @@ inline Own toCondition(const VecOwn& conds) { result = mk(std::move(result), clone(cur)); } } + if (result == nullptr) { + result = mk(); + } return result; } From 2671eb220a8221c5d367dcfbc5bfbe339e37c150 Mon Sep 17 00:00:00 2001 From: Bernhard Scholz Date: Wed, 30 Mar 2022 14:13:07 +1100 Subject: [PATCH 2/4] added test-cases --- tests/semantic/subsumption_multiple_rules/mx.csv | 0 tests/semantic/subsumption_multiple_rules/nx.csv | 0 .../subsumption_multiple_rules.dl | 10 ++++++++++ .../subsumption_multiple_rules.err | 3 +++ 4 files changed, 13 insertions(+) create mode 100644 tests/semantic/subsumption_multiple_rules/mx.csv create mode 100644 tests/semantic/subsumption_multiple_rules/nx.csv diff --git a/tests/semantic/subsumption_multiple_rules/mx.csv b/tests/semantic/subsumption_multiple_rules/mx.csv new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/semantic/subsumption_multiple_rules/nx.csv b/tests/semantic/subsumption_multiple_rules/nx.csv new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl b/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl index 41b1b0bb874..ab6754c2a89 100644 --- a/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl +++ b/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl @@ -103,3 +103,13 @@ ES(_, x1) <= ES(_, x2) :- x1 <= x2. AF(b) :- G(g, b), !R(b, d), ES(d, a), ES(d, e). .output AF +.decl my(x:number) +.decl mx(x:number) +mx(n) <= mx(n) :- my(n). +.output mx + +.decl nx(x:number) +nx(n) <= nx(n) :- nx(n). +.output nx + + diff --git a/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.err b/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.err index 3667c0d222c..843d806dbdb 100644 --- a/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.err +++ b/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.err @@ -7,3 +7,6 @@ AF(b) :- G(g, b), !R(b, d), ES(d, a), ES(d, e). Warning: Variable e only occurs once in file subsumption_multiple_rules.dl at line 103 AF(b) :- G(g, b), !R(b, d), ES(d, a), ES(d, e). --------------------------------------------^--- +Warning: No rules/facts defined for relation my in file subsumption_multiple_rules.dl at line 106 +.decl my(x:number) +------^------------ From 8a96e3414c726f456013ccc7cf9a5f84cba24737 Mon Sep 17 00:00:00 2001 From: Bernhard Scholz Date: Wed, 30 Mar 2022 14:13:38 +1100 Subject: [PATCH 3/4] Reformatting --- src/ast/transform/MinimiseProgram.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ast/transform/MinimiseProgram.cpp b/src/ast/transform/MinimiseProgram.cpp index 72b6b78a4e5..c56c88de22a 100644 --- a/src/ast/transform/MinimiseProgram.cpp +++ b/src/ast/transform/MinimiseProgram.cpp @@ -378,8 +378,8 @@ bool MinimiseProgramTransformer::reduceClauseBodies(TranslationUnit& translation bool changed = false; for (auto* clause : program.getClauses()) { if (isA(clause)) { - break; - } + break; + } auto bodyLiterals = clause->getBodyLiterals(); // TODO: This is n^2. Add AST hashing and use a hash-set. From a674fb614fb829c853a00ef9ed2a3655a6c5531d Mon Sep 17 00:00:00 2001 From: Bernhard Scholz Date: Wed, 30 Mar 2022 14:17:31 +1100 Subject: [PATCH 4/4] Reformatting --- .../subsumption_multiple_rules.dl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl b/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl index ab6754c2a89..9bcad025595 100644 --- a/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl +++ b/tests/semantic/subsumption_multiple_rules/subsumption_multiple_rules.dl @@ -105,11 +105,11 @@ AF(b) :- G(g, b), !R(b, d), ES(d, a), ES(d, e). .decl my(x:number) .decl mx(x:number) -mx(n) <= mx(n) :- my(n). +mx(n) <= mx(n) :- my(n). .output mx .decl nx(x:number) -nx(n) <= nx(n) :- nx(n). -.output nx +nx(n) <= nx(n) :- nx(n). +.output nx