From a8f9f3b694897867663bd1b8a7362eeaa05dcd20 Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Tue, 21 Jul 2015 01:40:59 +0200 Subject: [PATCH] Remove mutation in tactics. Fix path-conditions of matchs with guards --- src/main/scala/leon/purescala/TransformerWithPC.scala | 7 ++++--- src/main/scala/leon/verification/Tactic.scala | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/leon/purescala/TransformerWithPC.scala b/src/main/scala/leon/purescala/TransformerWithPC.scala index d098bedf9..f6dfaa543 100644 --- a/src/main/scala/leon/purescala/TransformerWithPC.scala +++ b/src/main/scala/leon/purescala/TransformerWithPC.scala @@ -33,10 +33,11 @@ abstract class TransformerWithPC extends Transformer { val patternExprPos = conditionForPattern(rs, c.pattern, includeBinders = true) val patternExprNeg = conditionForPattern(rs, c.pattern, includeBinders = false) val map = mapForPattern(rs, c.pattern) - val guard = replaceFromIDs(map, c.optGuard.getOrElse(BooleanLiteral(true))) + val guardOrTrue = c.optGuard.getOrElse(BooleanLiteral(true)) + val guardMapped = replaceFromIDs(map, guardOrTrue) - val subPath = register(patternExprPos, soFar) - soFar = register(not(and(patternExprNeg, guard)), soFar) + val subPath = register(and(patternExprPos, guardOrTrue), soFar) + soFar = register(not(and(patternExprNeg, guardMapped)), soFar) MatchCase(c.pattern, c.optGuard, rec(c.rhs,subPath)).copiedFrom(c) diff --git a/src/main/scala/leon/verification/Tactic.scala b/src/main/scala/leon/verification/Tactic.scala index b6cb76117..105c61d61 100644 --- a/src/main/scala/leon/verification/Tactic.scala +++ b/src/main/scala/leon/verification/Tactic.scala @@ -11,7 +11,6 @@ abstract class Tactic(vctx: VerificationContext) { val description : String def generateVCs(fd: FunDef): Seq[VC] = { - fd.fullBody = matchToIfThenElse(fd.fullBody) generatePostconditions(fd) ++ generatePreconditions(fd) ++ generateCorrectnessConditions(fd) -- GitLab