Expand definitions prior to model core computation (#2707)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 15 Nov 2018 22:40:37 +0000 (16:40 -0600)
committerGitHub <noreply@github.com>
Thu, 15 Nov 2018 22:40:37 +0000 (16:40 -0600)
src/smt/smt_engine.cpp

index cb7766c2d52904e5c8a1147e67937768a8c0a14a..f3a6c0c9ec1d84945c9ec718f351453658b2b7c7 100644 (file)
@@ -4306,7 +4306,16 @@ Model* SmtEngine::getModel() {
     // If we enabled model cores, we compute a model core for m based on our
     // assertions using the model core builder utility
     std::vector<Expr> easserts = getAssertions();
-    ModelCoreBuilder::setModelCore(easserts, m, options::modelCoresMode());
+    // must expand definitions
+    std::vector<Expr> eassertsProc;
+    std::unordered_map<Node, Node, NodeHashFunction> cache;
+    for (unsigned i = 0, nasserts = easserts.size(); i < nasserts; i++)
+    {
+      Node ea = Node::fromExpr(easserts[i]);
+      Node eae = d_private->expandDefinitions(ea, cache);
+      eassertsProc.push_back(eae.toExpr());
+    }
+    ModelCoreBuilder::setModelCore(eassertsProc, m, options::modelCoresMode());
   }
   m->d_inputName = d_filename;
   return m;