From 6ac88da4b9af7a5c2c004cca31b07219208eec94 Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Tue, 13 Oct 2015 17:29:26 +0200
Subject: [PATCH] Implement a bad version of printing vc position in SMT file

---
 src/main/scala/leon/solvers/Solver.scala              |  5 ++++-
 .../leon/solvers/combinators/PortfolioSolver.scala    |  3 ++-
 .../solvers/combinators/PortfolioSolverFactory.scala  |  2 --
 .../leon/solvers/combinators/RewritingSolver.scala    |  1 -
 .../leon/solvers/combinators/UnrollingSolver.scala    |  3 ++-
 .../leon/solvers/smtlib/SMTLIBQuantifiedSolver.scala  |  1 +
 src/main/scala/leon/solvers/smtlib/SMTLIBSolver.scala | 10 +++++++++-
 src/main/scala/leon/solvers/smtlib/SMTLIBTarget.scala | 11 ++++-------
 8 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/src/main/scala/leon/solvers/Solver.scala b/src/main/scala/leon/solvers/Solver.scala
index 1e20b15fd..841a28e50 100644
--- a/src/main/scala/leon/solvers/Solver.scala
+++ b/src/main/scala/leon/solvers/Solver.scala
@@ -3,7 +3,7 @@
 package leon
 package solvers
 
-import utils.{DebugSectionSolver, Interruptible}
+import leon.utils.{Position, DebugSectionSolver, Interruptible}
 import purescala.Expressions._
 import purescala.Common.{Tree, Identifier}
 import purescala.ExprOps._
@@ -87,8 +87,11 @@ trait Solver extends Interruptible {
 
   implicit lazy val leonContext = context
 
+  def dbg(msg: => Any) = context.reporter.debug(msg)
+
   def assertCnstr(expression: Expr): Unit
   def assertVC(vc: VC) = {
+    dbg(s"; Solving $vc @ ${vc.getPos}\n")
     assertCnstr(Not(vc.condition))
   }
 
diff --git a/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala b/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala
index 21580d6c2..b2003d101 100644
--- a/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala
+++ b/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala
@@ -4,7 +4,6 @@ package leon
 package solvers
 package combinators
 
-import purescala.Common._
 import purescala.Expressions._
 import verification.VC
 
@@ -32,6 +31,8 @@ class PortfolioSolver[S <: Solver with Interruptible](val context: LeonContext,
     solvers.foreach(_.assertVC(vc))
   }
 
+  override def dbg(msg: => Any) = solvers foreach (_.dbg(msg))
+
   def check: Option[Boolean] = {
     model = Model.empty
 
diff --git a/src/main/scala/leon/solvers/combinators/PortfolioSolverFactory.scala b/src/main/scala/leon/solvers/combinators/PortfolioSolverFactory.scala
index 855911455..7c29a16d0 100644
--- a/src/main/scala/leon/solvers/combinators/PortfolioSolverFactory.scala
+++ b/src/main/scala/leon/solvers/combinators/PortfolioSolverFactory.scala
@@ -4,8 +4,6 @@ package leon
 package solvers
 package combinators
 
-import utils.Interruptible
-import scala.collection.mutable.Queue
 import scala.reflect.runtime.universe._
 
 class PortfolioSolverFactory[S <: Solver](ctx: LeonContext, sfs: Seq[SolverFactory[S]])(implicit tag: TypeTag[S]) extends SolverFactory[PortfolioSolver[S] with TimeoutSolver] {
diff --git a/src/main/scala/leon/solvers/combinators/RewritingSolver.scala b/src/main/scala/leon/solvers/combinators/RewritingSolver.scala
index 2c414f2c0..0419d7d6e 100644
--- a/src/main/scala/leon/solvers/combinators/RewritingSolver.scala
+++ b/src/main/scala/leon/solvers/combinators/RewritingSolver.scala
@@ -4,7 +4,6 @@ package leon
 package solvers
 package combinators
 
-import purescala.Common._
 import purescala.Expressions._
 
 abstract class RewritingSolver[+S <: Solver, T](underlying: S) {
diff --git a/src/main/scala/leon/solvers/combinators/UnrollingSolver.scala b/src/main/scala/leon/solvers/combinators/UnrollingSolver.scala
index 6e75a33a9..0c7afeb65 100644
--- a/src/main/scala/leon/solvers/combinators/UnrollingSolver.scala
+++ b/src/main/scala/leon/solvers/combinators/UnrollingSolver.scala
@@ -15,7 +15,6 @@ import utils._
 
 import z3.FairZ3Component.{optFeelingLucky, optUseCodeGen, optAssumePre}
 import templates._
-import utils.Interruptible
 import evaluators._
 
 class UnrollingSolver(val context: LeonContext, val program: Program, underlying: Solver)
@@ -85,6 +84,8 @@ class UnrollingSolver(val context: LeonContext, val program: Program, underlying
     }
   }
 
+  override def dbg(msg: => Any) = underlying.dbg(msg)
+
   def push() {
     unrollingBank.push()
     solver.push()
diff --git a/src/main/scala/leon/solvers/smtlib/SMTLIBQuantifiedSolver.scala b/src/main/scala/leon/solvers/smtlib/SMTLIBQuantifiedSolver.scala
index bfcb70668..f98b4f7e4 100644
--- a/src/main/scala/leon/solvers/smtlib/SMTLIBQuantifiedSolver.scala
+++ b/src/main/scala/leon/solvers/smtlib/SMTLIBQuantifiedSolver.scala
@@ -14,6 +14,7 @@ trait SMTLIBQuantifiedSolver {
   // The reason is we do not want to assume postconditions of functions referring to
   // the current function, as this may make the proof unsound
   override def assertVC(vc: VC) = {
+    dbg(s"; Solving $vc")
     currentFunDef = Some(vc.fd)
     assertCnstr(withInductiveHyp(vc.condition))
   }
diff --git a/src/main/scala/leon/solvers/smtlib/SMTLIBSolver.scala b/src/main/scala/leon/solvers/smtlib/SMTLIBSolver.scala
index 05476ac11..99b4d9d17 100644
--- a/src/main/scala/leon/solvers/smtlib/SMTLIBSolver.scala
+++ b/src/main/scala/leon/solvers/smtlib/SMTLIBSolver.scala
@@ -4,6 +4,7 @@ package leon
 package solvers
 package smtlib
 
+import verification.VC
 import purescala.Common._
 import purescala.Expressions._
 import purescala.ExprOps._
@@ -23,8 +24,15 @@ abstract class SMTLIBSolver(val context: LeonContext, val program: Program)
   /* Reporter */
   protected val reporter = context.reporter
 
+  override def dbg(msg: => Any) = {
+    debugOut foreach { o =>
+      o.write(msg.toString)
+      o.flush()
+    }
+  }
+
   /* Public solver interface */
-  override def assertCnstr(expr: Expr): Unit = if(!hasError) {
+  def assertCnstr(expr: Expr): Unit = if(!hasError) {
     try {
       variablesOf(expr).foreach(declareVariable)
 
diff --git a/src/main/scala/leon/solvers/smtlib/SMTLIBTarget.scala b/src/main/scala/leon/solvers/smtlib/SMTLIBTarget.scala
index 9035700a0..01b35d9de 100644
--- a/src/main/scala/leon/solvers/smtlib/SMTLIBTarget.scala
+++ b/src/main/scala/leon/solvers/smtlib/SMTLIBTarget.scala
@@ -24,21 +24,18 @@ import _root_.smtlib.parser.Terms.{
   Let => SMTLet,
   _
 }
-import _root_.smtlib.theories.Core.{
-  Equals => SMTEquals
-}
 import _root_.smtlib.parser.CommandsResponses.{ Error => ErrorResponse, _ }
 import _root_.smtlib.theories._
 import _root_.smtlib.interpreters.ProcessInterpreter
 
 trait SMTLIBTarget extends Interruptible {
-  val context: LeonContext;
-  val program: Program;
-  protected val reporter: Reporter;
+  val context: LeonContext
+  val program: Program
+  protected val reporter: Reporter
 
   def targetName: String
 
-  implicit val debugSection: DebugSection;
+  implicit val debugSection: DebugSection
 
   protected def interpreterOps(ctx: LeonContext): Seq[String]
 
-- 
GitLab