diff --git a/src/main/scala/leon/synthesis/Rules.scala b/src/main/scala/leon/synthesis/Rules.scala index 83ed51723781298115c03088ac2370a0ce938c37..408b2395e9a4a074d856d4f62cc988ae55282686 100644 --- a/src/main/scala/leon/synthesis/Rules.scala +++ b/src/main/scala/leon/synthesis/Rules.scala @@ -1,6 +1,7 @@ package leon package synthesis +import purescala.Common._ import purescala.Trees._ object Rules { @@ -12,6 +13,9 @@ object Rules { abstract class Rule(val name: String) { def isApplicable(p: Problem, parent: Task): List[Task] + + + def subst(what: Tuple2[Identifier, Expr], in: Expr): Expr = replace(Map(Variable(what._1) -> what._2), in) } object OnePoint extends Rule("One-point") { @@ -32,14 +36,14 @@ object OnePoint extends Rule("One-point") { val others = exprs.filter(_ != eq) val oxs = p.xs.filter(_ != x) - val newProblem = Problem(p.as, replace(Map(Variable(x) -> e), And(others)), oxs) + val newProblem = Problem(p.as, subst(x -> e, And(others)), oxs) val onSuccess: List[Solution] => Solution = { case List(Solution(pre, term)) => if (oxs.isEmpty) { Solution(pre, e) } else { - Solution(pre, LetTuple(oxs, term, replace(Map(Variable(x) -> e), Tuple(p.xs.map(Variable(_))))) ) + Solution(pre, LetTuple(oxs, term, subst(x -> e, Tuple(p.xs.map(Variable(_))))) ) } case _ => Solution.none }