summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-01-30 14:05:06 -0600
committerGitHub <noreply@github.com>2020-01-30 14:05:06 -0600
commit164e5274e3135b245b8ce5576841bb6c329eecfe (patch)
tree6a3c6f1072a1a7b61babda01d0f1e89ed039463b
parent04f95f314db1c9fd8ac1ef475cab90c1709e6e47 (diff)
Ensure literals in FMF decision strategies are in the CNF stream (#3669)
-rw-r--r--src/theory/decision_strategy.cpp9
-rw-r--r--test/regress/CMakeLists.txt1
-rw-r--r--test/regress/regress0/fmf/issue3661-ccard-dec.smt211
3 files changed, 19 insertions, 2 deletions
diff --git a/src/theory/decision_strategy.cpp b/src/theory/decision_strategy.cpp
index b14936ee9..504cafc16 100644
--- a/src/theory/decision_strategy.cpp
+++ b/src/theory/decision_strategy.cpp
@@ -114,11 +114,16 @@ Node DecisionStrategyFmf::getLiteral(unsigned n)
if (!lit.isNull())
{
lit = Rewriter::rewrite(lit);
- lit = d_valuation.ensureLiteral(lit);
}
d_literals.push_back(lit);
}
- return d_literals[n];
+ Node ret = d_literals[n];
+ if (!ret.isNull())
+ {
+ // always ensure it is in the CNF stream
+ ret = d_valuation.ensureLiteral(ret);
+ }
+ return ret;
}
DecisionStrategySingleton::DecisionStrategySingleton(
diff --git a/test/regress/CMakeLists.txt b/test/regress/CMakeLists.txt
index c744227e4..74121ecbd 100644
--- a/test/regress/CMakeLists.txt
+++ b/test/regress/CMakeLists.txt
@@ -460,6 +460,7 @@ set(regress_0_tests
regress0/fmf/fmc_unsound_model.smt2
regress0/fmf/fmf-strange-bounds-2.smt2
regress0/fmf/forall_unit_data2.smt2
+ regress0/fmf/issue3661-ccard-dec.smt2
regress0/fmf/krs-sat.smt2
regress0/fmf/no-minimal-sat.smt2
regress0/fmf/quant_real_univ.cvc
diff --git a/test/regress/regress0/fmf/issue3661-ccard-dec.smt2 b/test/regress/regress0/fmf/issue3661-ccard-dec.smt2
new file mode 100644
index 000000000..4b120fc9d
--- /dev/null
+++ b/test/regress/regress0/fmf/issue3661-ccard-dec.smt2
@@ -0,0 +1,11 @@
+; COMMAND-LINE: --fmf-fun -i
+; EXPECT: sat
+; EXPECT: sat
+(set-logic ALL)
+(declare-fun a (Int) Bool)
+(declare-fun b (Int) Bool)
+(assert (= (a 0) (b 0)))
+(push)
+(check-sat)
+(pop)
+(check-sat)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback