Skip to content
Snippets Groups Projects
Commit c7105dbd authored by Etienne Kneuss's avatar Etienne Kneuss
Browse files

CEGIS

parent 2da52bf5
No related branches found
No related tags found
Loading
...@@ -273,11 +273,56 @@ class CEGISOnSteroids(synth: Synthesizer) extends Rule("cegis w. gen.", synth, 5 ...@@ -273,11 +273,56 @@ class CEGISOnSteroids(synth: Synthesizer) extends Rule("cegis w. gen.", synth, 5
def closedFormula = And(f :: recTerms.keySet.map(id => Not(Variable(id))).toList) def closedFormula = And(f :: recTerms.keySet.map(id => Not(Variable(id))).toList)
} }
println("Formula is: "+p.phi) var result: Option[RuleResult] = None
val initF = TentativeFormula(p.phi, Map() ++ p.xs.map(x => x -> Set(x))) // Set to expand on xs
println("unroll 1: "+initF.unroll.closedFormula)
println("unroll 2: "+initF.unroll.unroll.closedFormula)
RuleInapplicable var ass = p.as.toSet
var lastF = TentativeFormula(p.phi, Map() ++ p.xs.map(x => x -> Set(x)))
var currentF = lastF.unroll
var unrolings = 0
do {
println("Was: "+lastF.closedFormula)
println("Now Trying : "+currentF.closedFormula)
val tpe = TupleType(p.xs.map(_.getType))
var i = 0;
var maxTries = 10;
var predicates: Seq[Expr] = Seq()
while (result.isEmpty && i < maxTries) {
val phi = And(currentF.closedFormula +: predicates)
synth.solver.solveSAT(phi) match {
case (Some(true), satModel) =>
val notAss = satModel.keySet.filterNot(ass)
val satXsModel = satModel.filterKeys(notAss)
val newPhi = valuateWithModelIn(phi, notAss, satModel)
synth.solver.solveSAT(Not(newPhi)) match {
case (Some(true), invalidModel) =>
// Found as such as the xs break, refine predicates
predicates = valuateWithModelIn(phi, ass, invalidModel) +: predicates
case (Some(false), _) =>
result = Some(RuleSuccess(Solution(BooleanLiteral(true), Tuple(p.xs.map(valuateWithModel(satModel))).setType(tpe))))
case _ =>
}
case (Some(false), _) =>
case _ =>
}
i += 1
}
lastF = currentF
currentF = lastF.unroll
unrolings += 1
} while(unrolings < 5 && lastF != currentF && result.isEmpty)
result.getOrElse(RuleInapplicable)
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment