From ea8e883d23b6b19fa05766398e27bd79824c82e1 Mon Sep 17 00:00:00 2001
From: Viktor Kuncak <viktor.kuncak@epfl.ch>
Date: Sat, 12 Jan 2013 18:10:53 +0100
Subject: [PATCH] Strenghtened spec for computing set from a list by adding a
 parametric example.

---
 .../synthesis/cav2013/SynTreeListSet.scala    | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/testcases/synthesis/cav2013/SynTreeListSet.scala b/testcases/synthesis/cav2013/SynTreeListSet.scala
index 5639d9799..eae012139 100644
--- a/testcases/synthesis/cav2013/SynTreeListSet.scala
+++ b/testcases/synthesis/cav2013/SynTreeListSet.scala
@@ -30,15 +30,28 @@ object BinaryTree {
       case Cons(i, t) => Set(i) ++ l2s(t)
   }
 
-  def l2s_syn(l:List):Set[Int] = {
+  def listFrom(k:Int) : List = {
+    require(0 <= k)
+    if (k==0) Nil()
+    else Cons(k, listFrom(k-1))
+  }
+  def setFrom(k:Int) : Set[Int] = {
+    require(0 <= k)
+    if (k==0) Set.empty[Int]
+    else Set(k) ++ setFrom(k-1)
+  }
+
+  def l2s_syn(l:List,k:Int):Set[Int] = {
+    require(0 <= k)
     choose((res:Set[Int]) =>
-      l match {
+      (l!=listFrom(k) || res==setFrom(k)) &&
+      (l match {
 	case Nil() => (res==Set.empty[Int])
 	case Cons(x,Nil()) => res==Set(x)
 	case Cons(x,Cons(y,Nil())) => res==Set(x,y)
 	case Cons(x1,Cons(x2,Cons(x3,Cons(x4,Nil())))) => res==Set(x1,x2,x3,x4)
 	case _ => true
-      }
+      })
    )
   }
 
-- 
GitLab