Skip to content
Snippets Groups Projects
Commit 202ff967 authored by Etienne Kneuss's avatar Etienne Kneuss
Browse files

Implement solveSATWithCores

parent d4c0745b
No related branches found
No related tags found
No related merge requests found
...@@ -33,6 +33,15 @@ abstract class Solver(val reporter: Reporter) extends Extension(reporter) { ...@@ -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 def superseeds : Seq[String] = Nil
private var _forceStop = false private var _forceStop = false
......
...@@ -161,6 +161,11 @@ class FairZ3Solver(reporter: Reporter) extends Solver(reporter) with AbstractZ3S ...@@ -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]) = { 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 initializationStopwatch = new Stopwatch("init", false)
val blocking2Z3Stopwatch = new Stopwatch("blocking-set-to-z3", false) val blocking2Z3Stopwatch = new Stopwatch("blocking-set-to-z3", false)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment