From a2479356a4dc92d8c0a5b847301e361c5a54cd52 Mon Sep 17 00:00:00 2001
From: Philippe Suter <philippe.suter@gmail.com>
Date: Thu, 20 Dec 2012 20:44:06 +0100
Subject: [PATCH] Displaying counter-examples.

FairZ3Solver no longer displays counter-examples. As a result, they were
not shown when doing verification. The fix is to have AnalysisPhase
display the counter-examples when it wants to.
---
 src/main/scala/leon/solvers/z3/FairZ3Solver.scala    | 3 +--
 src/main/scala/leon/verification/AnalysisPhase.scala | 7 +++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
index 517080077..3523e1ce7 100644
--- a/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
+++ b/src/main/scala/leon/solvers/z3/FairZ3Solver.scala
@@ -159,8 +159,7 @@ class FairZ3Solver(context : LeonContext)
 
       evalResult match {
         case EvaluationSuccessful(BooleanLiteral(true)) =>
-          reporter.info("- Model validated:")
-          reporter.info(modelAsString)
+          reporter.info("- Model validated.")
           (true, asMap)
 
         case EvaluationSuccessful(BooleanLiteral(false)) =>
diff --git a/src/main/scala/leon/verification/AnalysisPhase.scala b/src/main/scala/leon/verification/AnalysisPhase.scala
index 07fe90ae7..2e340cac1 100644
--- a/src/main/scala/leon/verification/AnalysisPhase.scala
+++ b/src/main/scala/leon/verification/AnalysisPhase.scala
@@ -109,7 +109,9 @@ object AnalysisPhase extends LeonPhase[Program,VerificationReport] {
 
             val t1 = System.nanoTime
             se.init()
-            val solverResult = se.solve(vc)
+            val (satResult, counterexample) = se.solveSAT(Not(vc))
+            val solverResult = satResult.map(!_)
+
             val t2 = System.nanoTime
             val dt = ((t2 - t1) / 1000000) / 1000.0
 
@@ -125,8 +127,9 @@ object AnalysisPhase extends LeonPhase[Program,VerificationReport] {
                 true
               }
               case Some(false) => {
+                reporter.error("Found counter-example : ")
+                reporter.error(counterexample.toSeq.sortBy(_._1.name).map(p => p._1 + " -> " + p._2).mkString("\n"))
                 reporter.error("==== INVALID ====")
-
                 vcInfo.value = Some(false)
                 vcInfo.solvedWith = Some(se)
                 vcInfo.time = Some(dt)
-- 
GitLab