public bool GenerateWExpr(out WExpr program) { program = null; WExpr candidate; while (z3Solver.Check() == Status.SATISFIABLE) { ProgramBuilder builder = new ProgramBuilder(builderFilterModes); candidate = choiceTree.BuildProgram(z3Context, z3Solver.Model, builder); ExcludeLastModel(choiceVariables, z3Context, z3Solver); if (builder.KeepProgram() && filter.KeepProgram(candidate)) { program = candidate; break; } } return(program != null); }