Skip to content
Snippets Groups Projects
Commit 609c8fad authored by Philippe Suter's avatar Philippe Suter
Browse files

Extending the interface of Solver to support counter-example generation.

parent 47c5deba
No related branches found
No related tags found
No related merge requests found
package leon package leon
import purescala.Common._
import purescala.Trees._ import purescala.Trees._
import purescala.Definitions._ import purescala.Definitions._
...@@ -20,6 +21,8 @@ object Extensions { ...@@ -20,6 +21,8 @@ object Extensions {
// should halt as soon as possible with any result (Unknown is ok) as soon as forceStop is true // should halt as soon as possible with any result (Unknown is ok) as soon as forceStop is true
def solve(expression: Expr) : Option[Boolean] def solve(expression: Expr) : Option[Boolean]
def solveOrGetCounterexample(expression : Expr) : (Option[Boolean],Map[Identifier,Expr]) = (solve(expression), Map.empty)
def isUnsat(expression: Expr) : Option[Boolean] = solve(negate(expression)) def isUnsat(expression: Expr) : Option[Boolean] = solve(negate(expression))
def superseeds : Seq[String] = Nil def superseeds : Seq[String] = Nil
......
...@@ -478,6 +478,11 @@ class FairZ3Solver(reporter: Reporter) extends Solver(reporter) with AbstractZ3S ...@@ -478,6 +478,11 @@ class FairZ3Solver(reporter: Reporter) extends Solver(reporter) with AbstractZ3S
def solve(vc: Expr) = decide(vc, true) def solve(vc: Expr) = decide(vc, true)
override def solveOrGetCounterexample(vc : Expr) : (Option[Boolean],Map[Identifier,Expr]) = {
restartZ3
decideWithModel(vc, true)
}
def solveWithBounds(vc: Expr, fv: Boolean) : (Option[Boolean], Map[Identifier,Expr]) = { def solveWithBounds(vc: Expr, fv: Boolean) : (Option[Boolean], Map[Identifier,Expr]) = {
restartZ3 restartZ3
boundValues boundValues
......
...@@ -18,5 +18,4 @@ class TrivialSolver(reporter: Reporter) extends Solver(reporter) { ...@@ -18,5 +18,4 @@ class TrivialSolver(reporter: Reporter) extends Solver(reporter) {
case And(exs) if exs.contains(BooleanLiteral(false)) => Some(false) case And(exs) if exs.contains(BooleanLiteral(false)) => Some(false)
case _ => None case _ => None
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment