Skip to content
Snippets Groups Projects
Commit 04953925 authored by Emmanouil (Manos) Koukoutos's avatar Emmanouil (Manos) Koukoutos Committed by Etienne Kneuss
Browse files

EquivalentInputs substitutes back during solution reconstruction

parent d8f70e72
No related branches found
No related tags found
No related merge requests found
...@@ -143,6 +143,12 @@ trait RuleDSL { ...@@ -143,6 +143,12 @@ trait RuleDSL {
def substAll(what: Map[Identifier, Expr], in: Expr): Expr = replaceFromIDs(what, in) def substAll(what: Map[Identifier, Expr], in: Expr): Expr = replaceFromIDs(what, in)
val forward: List[Solution] => Option[Solution] = { ss => ss.headOption } val forward: List[Solution] => Option[Solution] = { ss => ss.headOption }
def forwardMap(f : Expr => Expr) : List[Solution] => Option[Solution] = {
_.headOption map { s =>
Solution(f(s.pre), s.defs, f(s.term))
}
}
def decomp(sub: List[Problem], onSuccess: List[Solution] => Option[Solution], description: String) def decomp(sub: List[Problem], onSuccess: List[Solution] => Option[Solution], description: String)
(implicit problem: Problem): RuleInstantiation = { (implicit problem: Problem): RuleInstantiation = {
......
...@@ -19,7 +19,7 @@ case object EquivalentInputs extends NormalizingRule("EquivalentInputs") { ...@@ -19,7 +19,7 @@ case object EquivalentInputs extends NormalizingRule("EquivalentInputs") {
case ccio @ CaseClassInstanceOf(cct, s) => ccio case ccio @ CaseClassInstanceOf(cct, s) => ccio
} }
var clauses = allClauses.filterNot(instanceOfs.toSet) val clauses = allClauses.filterNot(instanceOfs.toSet)
val ccSubsts = for (CaseClassInstanceOf(cct, s) <- instanceOfs) yield { val ccSubsts = for (CaseClassInstanceOf(cct, s) <- instanceOfs) yield {
...@@ -73,7 +73,12 @@ case object EquivalentInputs extends NormalizingRule("EquivalentInputs") { ...@@ -73,7 +73,12 @@ case object EquivalentInputs extends NormalizingRule("EquivalentInputs") {
pc = simplifier(andJoin(replaceSeq(substs, p.pc) +: postsToInject)), pc = simplifier(andJoin(replaceSeq(substs, p.pc) +: postsToInject)),
phi = simplifier(replaceSeq(substs, p.phi))) phi = simplifier(replaceSeq(substs, p.phi)))
List(decomp(List(sub), forward, "Equivalent Inputs")) val subst = replace(
substs.map{_.swap}.filter{ case (x,y) => formulaSize(x) > formulaSize(y) }.toMap,
_:Expr
)
List(decomp(List(sub), forwardMap(subst), "Equivalent Inputs"))
} else { } else {
Nil Nil
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment