From c7f114e45995a188c6b36ccb34974e3b2e5dcf67 Mon Sep 17 00:00:00 2001 From: Nicolas Voirol <voirol.nicolas@gmail.com> Date: Sat, 12 Nov 2016 00:08:49 +0100 Subject: [PATCH] Simplify formulas before going into solver --- src/main/scala/inox/ast/SymbolOps.scala | 4 ++++ .../scala/inox/solvers/unrolling/TemplateGenerator.scala | 2 +- src/main/scala/inox/solvers/unrolling/Templates.scala | 2 +- src/main/scala/inox/tip/Parser.scala | 8 -------- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/main/scala/inox/ast/SymbolOps.scala b/src/main/scala/inox/ast/SymbolOps.scala index f78c4060c..49cd236dc 100644 --- a/src/main/scala/inox/ast/SymbolOps.scala +++ b/src/main/scala/inox/ast/SymbolOps.scala @@ -622,6 +622,10 @@ trait SymbolOps { self: TypeOps => liftToLambdas(expr) } + def simplifyFormula(e: Expr): Expr = { + simplifyHOFunctions(simplifyByConstructors(simplifyQuantifications(e))) + } + // Use this only to debug isValueOfType private implicit class BooleanAdder(b: Boolean) { @inline def <(msg: => String) = {/*if(!b) println(msg); */b} diff --git a/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala b/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala index 2fc373f65..3b01c100e 100644 --- a/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala +++ b/src/main/scala/inox/solvers/unrolling/TemplateGenerator.scala @@ -43,7 +43,7 @@ trait TemplateGenerator { self: Templates => return cache(tfd) } - val lambdaBody : Expr = simplifyHOFunctions(tfd.fullBody) + val lambdaBody : Expr = simplifyFormula(tfd.fullBody) val funDefArgs: Seq[Variable] = tfd.params.map(_.toVariable) val lambdaArguments: Seq[Variable] = lambdaArgs(lambdaBody) diff --git a/src/main/scala/inox/solvers/unrolling/Templates.scala b/src/main/scala/inox/solvers/unrolling/Templates.scala index d2579e9a0..95f9f7b56 100644 --- a/src/main/scala/inox/solvers/unrolling/Templates.scala +++ b/src/main/scala/inox/solvers/unrolling/Templates.scala @@ -557,7 +557,7 @@ trait Templates extends TemplateGenerator val tpeClauses = bindings.flatMap { case (v, s) => registerSymbol(encodedStart, s, v.getType) }.toSeq - val instExpr = simplifyHOFunctions(simplifyQuantifications(expr)) + val instExpr = simplifyFormula(expr) val (condVars, exprVars, condTree, guardedExprs, eqs, lambdas, quants) = mkClauses(start, instExpr, bindings + (start -> encodedStart), polarity = Some(true)) diff --git a/src/main/scala/inox/tip/Parser.scala b/src/main/scala/inox/tip/Parser.scala index 0a5af026d..422cedd2b 100644 --- a/src/main/scala/inox/tip/Parser.scala +++ b/src/main/scala/inox/tip/Parser.scala @@ -43,14 +43,6 @@ class Parser(file: File) { (for (cmd <- script.commands) yield cmd match { case CheckSat() => val expr: Expr = locals.symbols.andJoin(assertions) - for (fd <- locals.symbols.functions.values) { - if (fd.fullBody.getType(locals.symbols) == Untyped) { - println(locals.symbols.explainTyping(fd.fullBody)(PrinterOptions(printUniqueIds = true, symbols = Some(locals.symbols)))) - } - } - if (expr.getType(locals.symbols) == Untyped) { - println(locals.symbols.explainTyping(expr)(PrinterOptions(printUniqueIds = true, symbols = Some(locals.symbols)))) - } Some((locals.symbols, expr)) case _ => -- GitLab