From 6adbc58360d34d2420345510ed6a981fac95d077 Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <ekneuss@gmail.com>
Date: Tue, 23 Oct 2012 18:42:44 +0200
Subject: [PATCH] Fix assert, Add example, add more debug output for last rule

---
 src/main/scala/leon/purescala/Trees.scala       | 2 ++
 src/main/scala/leon/synthesis/Rules.scala       | 2 +-
 src/main/scala/leon/synthesis/Synthesizer.scala | 1 +
 testcases/synthesis/Spt.scala                   | 2 ++
 4 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/main/scala/leon/purescala/Trees.scala b/src/main/scala/leon/purescala/Trees.scala
index 04db1ab18..58e4f8162 100644
--- a/src/main/scala/leon/purescala/Trees.scala
+++ b/src/main/scala/leon/purescala/Trees.scala
@@ -1059,6 +1059,8 @@ object Trees {
           None
         }
       }
+      case letTuple @ LetTuple(ids, e, body) =>
+      None
       case _ => None 
     }
     searchAndReplace(simplerLet)(expr)
diff --git a/src/main/scala/leon/synthesis/Rules.scala b/src/main/scala/leon/synthesis/Rules.scala
index b2792da85..e1dab45ee 100644
--- a/src/main/scala/leon/synthesis/Rules.scala
+++ b/src/main/scala/leon/synthesis/Rules.scala
@@ -131,7 +131,7 @@ class Assert(synth: Synthesizer) extends Rule("Assert", synth) {
 
         if (!exprsA.isEmpty) {
           if (others.isEmpty) {
-            List(task.solveUsing(this, Solution(And(exprsA), BooleanLiteral(true), 150), 150))
+            List(task.solveUsing(this, Solution(And(exprsA), Tuple(p.xs.map(id => simplestValue(Variable(id))))), 150))
           } else {
             val onSuccess: List[Solution] => Solution = { 
               case List(s) => Solution(And(s.pre +: exprsA), s.term, 150)
diff --git a/src/main/scala/leon/synthesis/Synthesizer.scala b/src/main/scala/leon/synthesis/Synthesizer.scala
index 9361e2c92..a4ab6b46f 100644
--- a/src/main/scala/leon/synthesis/Synthesizer.scala
+++ b/src/main/scala/leon/synthesis/Synthesizer.scala
@@ -32,6 +32,7 @@ class Synthesizer(val r: Reporter, val solvers: List[Solver]) {
 
       alternatives.find(_.isSuccess) match {
         case Some(ss) =>
+          info(" => "+ss.rule+" succeeded")
           ss.succeeded()
         case None =>
           info(" => Possible Next Steps:")
diff --git a/testcases/synthesis/Spt.scala b/testcases/synthesis/Spt.scala
index 551317142..3a797a9b1 100644
--- a/testcases/synthesis/Spt.scala
+++ b/testcases/synthesis/Spt.scala
@@ -13,6 +13,8 @@ object SynthesisProceduresToolkit {
 
   def e5(a1 : NatList, a2 : Nat, a3 : NatList): (Nat, NatList, Nat, NatList) = choose( (x1 : Nat, x2 : NatList, x3 : Nat, x4 : NatList) => Cons(Succ(x1), x2) == a1 && Succ(x1) != a2 && a3 == Cons(x3, Cons(x3,  x4)))
 
+  def e6(a: Nat, b: Nat): (Nat, NatList) = choose( (x: Nat, y: NatList) => a == Succ(b))
+
   abstract class Nat
   case class Z() extends Nat
   case class Succ(n: Nat) extends Nat
-- 
GitLab