If we can't find a weaker implicant, fail gracefully and return the original lemma
authorGuy <katz911@gmail.com>
Wed, 27 Jul 2016 16:46:24 +0000 (09:46 -0700)
committerGuy <katz911@gmail.com>
Wed, 27 Jul 2016 16:46:24 +0000 (09:46 -0700)
src/proof/proof_manager.cpp

index 65dbb644dd84106dda12dd7af84efb3ea999f45f..0e683b0848b5ac90b3faf1d93c473a8c51afe37a 100644 (file)
@@ -321,9 +321,10 @@ void ProofManager::getLemmasInUnsatCore(theory::TheoryId theory, std::vector<Nod
     // however, there are some rewrite issues with the arith solver, resulting
     // in non-registered recipes. For now we assume no one is requesting arith lemmas.
     LemmaProofRecipe recipe;
-    if (getCnfProof()->haveProofRecipe(lemma))
-      recipe = getCnfProof()->getProofRecipe(lemma);
+    if (!getCnfProof()->haveProofRecipe(lemma))
+      continue;
 
+    recipe = getCnfProof()->getProofRecipe(lemma);
     if (recipe.simpleLemma() && recipe.getTheory() == theory) {
       lemmas.push_back(recipe.getOriginalLemma());
     }
@@ -368,9 +369,10 @@ Node ProofManager::getWeakestImplicantInUnsatCore(Node lemma) {
     // however, there are some rewrite issues with the arith solver, resulting
     // in non-registered recipes. For now we assume no one is requesting arith lemmas.
     LemmaProofRecipe recipe;
-    if (getCnfProof()->haveProofRecipe(currentLemma))
-      recipe = getCnfProof()->getProofRecipe(currentLemma);
+    if (!getCnfProof()->haveProofRecipe(currentLemma))
+      continue;
 
+    recipe = getCnfProof()->getProofRecipe(currentLemma);
     if (recipe.getOriginalLemma() == lemma) {
       for (lemmaIt = currentLemma.begin(); lemmaIt != currentLemma.end(); ++lemmaIt) {
         builder << *lemmaIt;
@@ -381,12 +383,14 @@ Node ProofManager::getWeakestImplicantInUnsatCore(Node lemma) {
           if (lemma[i] == *lemmaIt)
             found = true;
         }
-        AlwaysAssert(found);
+
+        if (!found)
+          return lemma;
       }
     }
   }
 
-  Assert(builder.getNumChildren() != 0);
+  AlwaysAssert(builder.getNumChildren() != 0);
 
   if (builder.getNumChildren() == 1)
     return builder[0];