summaryrefslogtreecommitdiff
path: root/libs/ezsat/ezsat.cc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-03-01 21:00:34 +0100
committerClifford Wolf <clifford@clifford.at>2014-03-01 21:00:34 +0100
commitd500bd749f84c0b05a8ec96d2a5fc33ace0c5b58 (patch)
tree90f2dc8cf7195a71ab48c4fea0b9ce1e6e105f71 /libs/ezsat/ezsat.cc
parent23f0a12c727721478bcb87ec142fb86a329f7cdb (diff)
Added ezSAT::eliminated API to help the SAT solver remember eliminated variables
Diffstat (limited to 'libs/ezsat/ezsat.cc')
-rw-r--r--libs/ezsat/ezsat.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/libs/ezsat/ezsat.cc b/libs/ezsat/ezsat.cc
index cc6301e4..4389c7a6 100644
--- a/libs/ezsat/ezsat.cc
+++ b/libs/ezsat/ezsat.cc
@@ -348,9 +348,13 @@ void ezSAT::freeze(int)
{
}
-void ezSAT::assume(int id)
+bool ezSAT::eliminated(int)
{
+ return false;
+}
+void ezSAT::assume(int id)
+{
if (id < 0)
{
assert(0 < -id && -id <= int(expressions.size()));
@@ -486,7 +490,7 @@ int ezSAT::bind(int id)
if (id >= 0) {
assert(0 < id && id <= int(literals.size()));
cnfLiteralVariables.resize(literals.size());
- if (cnfLiteralVariables[id-1] == 0) {
+ if (cnfLiteralVariables[id-1] == 0 || eliminated(cnfLiteralVariables[id-1])) {
cnfLiteralVariables[id-1] = ++cnfVariableCount;
if (id == TRUE)
add_clause(+cnfLiteralVariables[id-1]);
@@ -499,7 +503,7 @@ int ezSAT::bind(int id)
assert(0 < -id && -id <= int(expressions.size()));
cnfExpressionVariables.resize(expressions.size());
- if (cnfExpressionVariables[-id-1] == 0)
+ if (cnfExpressionVariables[-id-1] == 0 || eliminated(cnfExpressionVariables[-id-1]))
{
OpId op;
std::vector<int> args;