From d91f2517f6d54f1ee08d988e81a5f718c735ed58 Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Thu, 15 Nov 2012 21:26:00 +0100 Subject: [PATCH] Yay cores! --- src/main/scala/leon/solvers/z3/FairZ3Solver.scala | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala index b9090d50f..68efe5d24 100644 --- a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala +++ b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala @@ -326,14 +326,20 @@ class FairZ3Solver(reporter: Reporter) extends Solver(reporter) with AbstractZ3S // we need the model to perform the additional test reporter.info(" - Running search without blocked literals (w/ lucky test)") secondZ3SearchStopwatch.start - val (result2,m2) = assumptionsAsZ3 match { - case Some(as) => val res = z3.checkAssumptions(as: _*); (res._1, res._2) - case None => z3.checkAndGetModel() + val (result2,m2,c2) = assumptionsAsZ3 match { + case Some(as) => z3.checkAssumptions(as: _*) + case None => val res = z3.checkAndGetModel(); (res._1, res._2, Seq.empty[Z3AST]) } secondZ3SearchStopwatch.stop reporter.info(" - Finished search without blocked literals") if (result2 == Some(false)) { + val core: Set[Expr] = c2.map(ast => fromZ3Formula(m, ast, Some(BooleanType)) match { + case n @ Not(Variable(_)) => n + case v @ Variable(_) => v + case _ => scala.sys.error("Impossible element extracted from core: " + ast) + }).toSet + foundAnswer(Some(true), core = core) } else { luckyStopwatch.start -- GitLab