break if append_steps > 0: for i in range(step + 1, step + 1 + append_steps): print_msg("Appending additional step %d." % i) smt.write("(declare-fun s%d () |%s_s|)" % (i, topmod)) smt.write("(assert (not (|%s_is| s%d)))" % (topmod, i)) smt.write("(assert (|%s_u| s%d))" % (topmod, i)) smt.write("(assert (|%s_h| s%d))" % (topmod, i)) smt.write("(assert (|%s_t| s%d s%d))" % (topmod, i - 1, i)) smt.write("(assert %s)" % get_constr_expr(constr_assumes, i)) print_msg("Re-solving with appended steps..") assert smt.check_sat() == "sat" reached_covers = smt.bv2bin( smt.get("(covers_%d s%d)" % (coveridx, step))) assert len(reached_covers) == len(cover_desc) new_cover_mask = [] for i in range(len(reached_covers)): if reached_covers[i] == "0": new_cover_mask.append(cover_mask[i]) continue print_msg("Reached cover statement at %s in step %d." % (cover_desc[i], step)) new_cover_mask.append("0") cover_mask = "".join(new_cover_mask)
smt_pop() break if append_steps > 0: for i in range(step+1, step+1+append_steps): print_msg("Appending additional step %d." % i) smt_state(i) smt_assert_antecedent("(not (|%s_is| s%d))" % (topmod, i)) smt_assert_consequent("(|%s_u| s%d)" % (topmod, i)) smt_assert_antecedent("(|%s_h| s%d)" % (topmod, i)) smt_assert_antecedent("(|%s_t| s%d s%d)" % (topmod, i-1, i)) smt_assert_consequent(get_constr_expr(constr_assumes, i)) print_msg("Re-solving with appended steps..") assert smt_check_sat() == "sat" reached_covers = smt.bv2bin(smt.get("(covers_%d s%d)" % (coveridx, step))) assert len(reached_covers) == len(cover_desc) new_cover_mask = [] for i in range(len(reached_covers)): if reached_covers[i] == "0": new_cover_mask.append(cover_mask[i]) continue print_msg("Reached cover statement at %s in step %d." % (cover_desc[i], step)) new_cover_mask.append("0") cover_mask = "".join(new_cover_mask) for i in range(step+1+append_steps):