From 94e82a7bc285925fe7d72c12f39cf4e3d95ec43f Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Fri, 4 Jan 2013 16:57:35 +0100 Subject: [PATCH] Simplify preconditions when possible --- src/main/scala/leon/purescala/TreeOps.scala | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/scala/leon/purescala/TreeOps.scala b/src/main/scala/leon/purescala/TreeOps.scala index 1b5a4bb9f..c3cc7809d 100644 --- a/src/main/scala/leon/purescala/TreeOps.scala +++ b/src/main/scala/leon/purescala/TreeOps.scala @@ -7,6 +7,7 @@ object TreeOps { import Common._ import TypeTrees._ import Definitions._ + import xlang.Trees.LetDef import Trees._ import Extractors._ @@ -1131,6 +1132,23 @@ object TreeOps { def simplifyTautologies(solver : Solver)(expr : Expr) : Expr = { def pre(e : Expr) = e match { + case LetDef(fd, expr) if fd.hasPrecondition => + val pre = fd.precondition.get + + solver.solve(pre) match { + case Some(true) => + fd.precondition = None + + case Some(false) => solver.solve(Not(pre)) match { + case Some(true) => + fd.precondition = Some(BooleanLiteral(false)) + case _ => + } + case None => + } + + e + case IfExpr(cond, then, elze) => try { solver.solve(cond) match { -- GitLab