From 202ff9676e0a72924d8eb2480616ca8e4f98b0b7 Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <ekneuss@gmail.com>
Date: Thu, 15 Nov 2012 19:04:00 +0100
Subject: [PATCH] Implement solveSATWithCores

---
 src/main/scala/leon/solvers/Solver.scala          | 9 +++++++++
 src/main/scala/leon/solvers/z3/FairZ3Solver.scala | 5 +++++
 2 files changed, 14 insertions(+)

diff --git a/src/main/scala/leon/solvers/Solver.scala b/src/main/scala/leon/solvers/Solver.scala
index f42d6ed34..d6c15b269 100644
--- a/src/main/scala/leon/solvers/Solver.scala
+++ b/src/main/scala/leon/solvers/Solver.scala
@@ -33,6 +33,15 @@ abstract class Solver(val reporter: Reporter) extends Extension(reporter) {
     }
   }
 
+  def solveSATWithCores(expression: Expr, assumptions: Set[Expr]): (Option[Boolean], Map[Identifier, Expr], Set[Expr]) = {
+    solveSAT(And(expression +: assumptions.toSeq)) match {
+      case (Some(false), _) =>
+        (Some(false), Map(), assumptions)
+      case (r, m) =>
+        (r, m, Set())
+    }
+  }
+
   def superseeds : Seq[String] = Nil
 
   private var _forceStop = false
diff --git a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
index e35dc8815..95d89c73d 100644
--- a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
+++ b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
@@ -161,6 +161,11 @@ class FairZ3Solver(reporter: Reporter) extends Solver(reporter) with AbstractZ3S
     }
   }
 
+  override def solveSATWithCores(expression: Expr, assumptions: Set[Expr]): (Option[Boolean], Map[Identifier, Expr], Set[Expr]) = {
+    restartZ3
+    decideWithModel(expression, false, None, Some(assumptions))
+  }
+
   private[this] def decideWithModel(vc: Expr, forValidity: Boolean, evaluator: Option[(Map[Identifier,Expr]) => Boolean] = None, assumptions: Option[Set[Expr]] = None): (Option[Boolean], Map[Identifier,Expr], Set[Expr]) = {
     val initializationStopwatch = new Stopwatch("init",               false)
     val blocking2Z3Stopwatch    = new Stopwatch("blocking-set-to-z3", false)
-- 
GitLab