From 83139845a8024f5d1241e53e1bfdf4db20aa6037 Mon Sep 17 00:00:00 2001
From: Nicolas Voirol <voirol.nicolas@gmail.com>
Date: Fri, 28 Oct 2016 13:46:59 +0200
Subject: [PATCH] Fix for model extraction in UnrollingSolver

---
 .../inox/solvers/unrolling/QuantificationTemplates.scala     | 2 +-
 src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala  | 5 +++--
 src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala        | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala b/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala
index 4cd8f09a2..8c1358805 100644
--- a/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala
+++ b/src/main/scala/inox/solvers/unrolling/QuantificationTemplates.scala
@@ -909,7 +909,7 @@ trait QuantificationTemplates { self: Templates =>
       clauses += mkSubstituter(substMap)(mkImplies(b, clause))
     }
 
-    for (q <- quantifications) {
+    for (q <- quantifications if ignoredSubsts.isDefinedAt(q)) {
       val guard = Variable(FreshIdentifier("guard", true), BooleanType)
       val elems = q.quantifiers.map(_._1)
       val values = elems.map(v => v.freshen)
diff --git a/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala b/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala
index 08f296e02..915aa9edb 100644
--- a/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala
+++ b/src/main/scala/inox/solvers/unrolling/UnrollingSolver.scala
@@ -385,9 +385,10 @@ trait AbstractUnrollingSolver extends Solver { self =>
             p => (unflatten(p._1) zip unflatten(p._2)).map(p => (p._1, andJoin(p._2.flatten)))
           }
 
-          val default = extractValue(unflatten(flatArguments.last._1).foldLeft(f -> (tpe: Type)) {
+          val (app, to) = unflatten(flatArguments.last._1).foldLeft(f -> (tpe: Type)) {
             case ((f, tpe: FunctionType), args) => (templates.mkApp(f, encode(tpe), args), tpe.to)
-          }._1, tpe)
+          }
+          val default = extractValue(app, to)
 
           extract(f, tpe, params, allArguments, default)._1
         }
diff --git a/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala b/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala
index fd394dfb8..59a16643c 100644
--- a/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala
+++ b/src/main/scala/inox/solvers/z3/AbstractZ3Solver.scala
@@ -503,7 +503,7 @@ trait AbstractZ3Solver
       kind match {
         case Z3NumeralIntAST(Some(v)) =>
           val leading = t.toString.substring(0, 2 min t.toString.length)
-          if(leading == "#x") {
+          if (leading == "#x") {
             _root_.smtlib.common.Hexadecimal.fromString(t.toString.substring(2)) match {
               case Some(hexa) =>
                 tpe match {
-- 
GitLab