From b8e4871d9efa8bf966cb693a00bf1c451aca5b79 Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Sun, 15 Nov 2015 10:53:00 -0800 Subject: [PATCH] disable bottom-up coi filtering when relations contain facts. bug reported by SeanMcL Signed-off-by: Nikolaj Bjorner --- src/muz/dataflow/dataflow.h | 1 + src/muz/transforms/dl_mk_coi_filter.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/muz/dataflow/dataflow.h b/src/muz/dataflow/dataflow.h index 9e100121a..1e52c5f93 100644 --- a/src/muz/dataflow/dataflow.h +++ b/src/muz/dataflow/dataflow.h @@ -87,6 +87,7 @@ namespace datalog { for (func_decl_set::iterator I = output_preds.begin(), E = output_preds.end(); I != E; ++I) { func_decl* sym = *I; + TRACE("dl", tout << sym->get_name() << "\n";); const rule_vector& output_rules = m_rules.get_predicate_rules(sym); for (unsigned i = 0; i < output_rules.size(); ++i) { m_facts.insert_if_not_there2(sym, Fact())->get_data().m_value.init_down(m_context, output_rules[i]); diff --git a/src/muz/transforms/dl_mk_coi_filter.cpp b/src/muz/transforms/dl_mk_coi_filter.cpp index 67b88724c..c452e2611 100644 --- a/src/muz/transforms/dl_mk_coi_filter.cpp +++ b/src/muz/transforms/dl_mk_coi_filter.cpp @@ -41,6 +41,9 @@ namespace datalog { bool new_tail = false; bool contained = true; for (unsigned i = 0; i < r->get_uninterpreted_tail_size(); ++i) { + if (m_context.has_facts(r->get_decl(i))) { + return 0; + } if (r->is_neg_tail(i)) { if (!engine.get_fact(r->get_decl(i)).is_reachable()) { if (!new_tail) {