Fixes to Valuation.
authorTim King <taking@cs.nyu.edu>
Thu, 31 Mar 2011 18:35:45 +0000 (18:35 +0000)
committerTim King <taking@cs.nyu.edu>
Thu, 31 Mar 2011 18:35:45 +0000 (18:35 +0000)
src/prop/prop_engine.cpp
src/prop/sat.h
src/theory/valuation.cpp

index d64aadc961e54dc3df66348da69422cac260a7a5..44709630d6c8788659fb8870c101919e5507c6c1 100644 (file)
@@ -104,7 +104,7 @@ void PropEngine::printSatisfyingAssignment(){
     SatLiteral l = curr.second.literal;
     if(!sign(l)) {
       Node n = curr.first;
-      SatLiteralValue value = d_satSolver->value(l);
+      SatLiteralValue value = d_satSolver->modelValue(l);
       Debug("prop-value") << "'" << l << "' " << value << " " << n << endl;
     }
   }
@@ -138,7 +138,9 @@ Result PropEngine::checkSat() {
 
 Node PropEngine::getValue(TNode node) {
   Assert(node.getType().isBoolean());
-  SatLiteralValue v = d_satSolver->value(d_cnfStream->getLiteral(node));
+  SatLiteral lit = d_cnfStream->getLiteral(node);
+
+  SatLiteralValue v = d_satSolver->value(lit);
   if(v == l_True) {
     return NodeManager::currentNM()->mkConst(true);
   } else if(v == l_False) {
index 88df366e2526633967a54edebca333035ff91065..f9e135c0d33670ec90dc64e83cb26c5c4ec9a6a9 100644 (file)
@@ -232,8 +232,12 @@ public:
 
   void setCnfStream(CnfStream* cnfStream);
 
+  /** Call value() during the search.*/
   SatLiteralValue value(SatLiteral l);
 
+  /** Call value() when the search is done.*/
+  SatLiteralValue modelValue(SatLiteral l);
+
   int getLevel() const;
 
   void push();
@@ -294,6 +298,10 @@ inline SatVariable SatSolver::newVar(bool theoryAtom) {
 }
 
 inline SatLiteralValue SatSolver::value(SatLiteral l) {
+  return d_minisat->value(l);
+}
+
+inline SatLiteralValue SatSolver::modelValue(SatLiteral l) {
   return d_minisat->modelValue(l);
 }
 
index 1f82f14045c88f831f0a6540b03758ef8af12784..9f33c2c4f365aa4ba6409e484a61eaca197f9fc6 100644 (file)
@@ -29,7 +29,13 @@ Node Valuation::getValue(TNode n) {
 
 Node Valuation::getSatValue(TNode n) {
   if(n.getKind() == kind::NOT) {
-    return NodeManager::currentNM()->mkConst(! d_engine->getPropEngine()->getValue(n[0]).getConst<bool>());
+    Node atomRes = d_engine->getPropEngine()->getValue(n[0]);
+    if(atomRes.getKind() == kind::CONST_BOOLEAN){
+      return NodeManager::currentNM()->mkConst(!atomRes.getConst<bool>());
+    }else{
+      Assert(atomRes.isNull());
+      return atomRes;
+    }
   } else {
     return d_engine->getPropEngine()->getValue(n);
   }