From 3df2a8d7e6cc7da168ccf4c1aa2a054ecbde1061 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Wed, 25 Apr 2012 22:52:10 +0200
Subject: [PATCH] special treatment of function that take a constant value

---
 mytest/Epsilon1.scala                  |  6 +++++-
 src/main/scala/leon/FairZ3Solver.scala | 11 ++++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/mytest/Epsilon1.scala b/mytest/Epsilon1.scala
index 1d83db59a..827c1e6e5 100644
--- a/mytest/Epsilon1.scala
+++ b/mytest/Epsilon1.scala
@@ -2,7 +2,11 @@ import leon.Utils._
 
 object Epsilon1 {
 
-  def foo(x: Int): Int = {
+  def greater(x: Int): Int = {
+    epsilon((y: Int) => y > x)
+  } ensuring(_ >= x)
+
+  def greaterWrong(x: Int): Int = {
     epsilon((y: Int) => y >= x)
   } ensuring(_ > x)
 
diff --git a/src/main/scala/leon/FairZ3Solver.scala b/src/main/scala/leon/FairZ3Solver.scala
index 20e1f1dac..2e10af6c5 100644
--- a/src/main/scala/leon/FairZ3Solver.scala
+++ b/src/main/scala/leon/FairZ3Solver.scala
@@ -808,7 +808,16 @@ class FairZ3Solver(reporter: Reporter) extends Solver(reporter) with AbstractZ3S
           } else Seq()
         } else Seq()
       }).toMap
-      val asMap = modelToMap(model, variables) ++ functionsAsMap
+      val constantFunctionsAsMap: Map[Identifier, Expr] = model.getModelConstantInterpretations.flatMap(p => {
+        if(isKnownDecl(p._1)) {
+          val fd = functionDeclToDef(p._1)
+          if(!fd.hasImplementation) {
+            Seq((fd.id, fromZ3Formula(model, p._2, Some(fd.returnType))))
+          } else Seq()
+        } else Seq()
+      }).toMap
+      //val undefinedFunctionIds = functionMap.keys.filterNot(fd => fd.hasImplementation || !fd.args.isEmpty).map(_.id) 
+      val asMap = modelToMap(model, variables) ++ functionsAsMap ++ constantFunctionsAsMap
       model.delete
       lazy val modelAsString = asMap.toList.map(p => p._1 + " -> " + p._2).mkString("\n")
       val evalResult = eval(asMap, formula, evaluator)
-- 
GitLab