mirror of
https://github.com/Z3Prover/z3
synced 2025-06-28 17:08:45 +00:00
z3str3: loop and trace cleanup
This commit is contained in:
parent
b1e6031230
commit
8d3ed19981
1 changed files with 21 additions and 30 deletions
|
@ -471,8 +471,7 @@ namespace smt {
|
||||||
} else {
|
} else {
|
||||||
unsigned_vector eps_states;
|
unsigned_vector eps_states;
|
||||||
aut->get_epsilon_closure(initial_state, eps_states);
|
aut->get_epsilon_closure(initial_state, eps_states);
|
||||||
for (unsigned_vector::iterator it = eps_states.begin(); it != eps_states.end(); ++it) {
|
for (unsigned state : eps_states) {
|
||||||
unsigned state = *it;
|
|
||||||
if (aut->is_final_state(state)) {
|
if (aut->is_final_state(state)) {
|
||||||
zero_solution = true;
|
zero_solution = true;
|
||||||
break;
|
break;
|
||||||
|
@ -494,16 +493,15 @@ namespace smt {
|
||||||
expr_ref_vector trail(m);
|
expr_ref_vector trail(m);
|
||||||
u_map<expr*> maps[2];
|
u_map<expr*> maps[2];
|
||||||
bool select_map = false;
|
bool select_map = false;
|
||||||
expr_ref ch(m), cond(m);
|
expr_ref cond(m);
|
||||||
eautomaton::moves mvs;
|
eautomaton::moves mvs;
|
||||||
maps[0].insert(aut->init(), m.mk_true());
|
maps[0].insert(aut->init(), m.mk_true());
|
||||||
// is_accepted(a, aut) & some state in frontier is final.
|
// is_accepted(a, aut) & some state in frontier is final.
|
||||||
|
|
||||||
for (unsigned i = 0; i < str_chars.size(); ++i) {
|
for (auto& ch : str_chars) {
|
||||||
u_map<expr*>& frontier = maps[select_map];
|
u_map<expr*>& frontier = maps[select_map];
|
||||||
u_map<expr*>& next = maps[!select_map];
|
u_map<expr*>& next = maps[!select_map];
|
||||||
select_map = !select_map;
|
select_map = !select_map;
|
||||||
ch = str_chars.get(i);
|
|
||||||
next.reset();
|
next.reset();
|
||||||
u_map<expr*>::iterator it = frontier.begin(), end = frontier.end();
|
u_map<expr*>::iterator it = frontier.begin(), end = frontier.end();
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
|
@ -511,8 +509,7 @@ namespace smt {
|
||||||
unsigned state = it->m_key;
|
unsigned state = it->m_key;
|
||||||
expr* acc = it->m_value;
|
expr* acc = it->m_value;
|
||||||
aut->get_moves_from(state, mvs, false);
|
aut->get_moves_from(state, mvs, false);
|
||||||
for (unsigned j = 0; j < mvs.size(); ++j) {
|
for (eautomaton::move& mv : mvs) {
|
||||||
eautomaton::move const& mv = mvs[j];
|
|
||||||
SASSERT(mv.t());
|
SASSERT(mv.t());
|
||||||
if (mv.t()->is_char() && m.is_value(mv.t()->get_char()) && m.is_value(ch)) {
|
if (mv.t()->is_char() && m.is_value(mv.t()->get_char()) && m.is_value(ch)) {
|
||||||
if (mv.t()->get_char() == ch) {
|
if (mv.t()->get_char() == ch) {
|
||||||
|
@ -772,8 +769,7 @@ namespace smt {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_trace_enabled("str")) {
|
TRACE("str",
|
||||||
TRACE_CODE(
|
|
||||||
ast_manager & m = get_manager();
|
ast_manager & m = get_manager();
|
||||||
context & ctx = get_context();
|
context & ctx = get_context();
|
||||||
tout << "dumping all formulas:" << std::endl;
|
tout << "dumping all formulas:" << std::endl;
|
||||||
|
@ -782,7 +778,6 @@ namespace smt {
|
||||||
tout << mk_pp(ex, m) << (ctx.is_relevant(ex) ? "" : " (NOT REL)") << std::endl;
|
tout << mk_pp(ex, m) << (ctx.is_relevant(ex) ? "" : " (NOT REL)") << std::endl;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
fixed_length_subterm_trail.reset();
|
fixed_length_subterm_trail.reset();
|
||||||
fixed_length_used_len_terms.reset();
|
fixed_length_used_len_terms.reset();
|
||||||
|
@ -955,8 +950,7 @@ namespace smt {
|
||||||
precondition.push_back(m.mk_eq(u.str.mk_length(var), mk_int(e.get_value())));
|
precondition.push_back(m.mk_eq(u.str.mk_length(var), mk_int(e.get_value())));
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE_CODE(
|
TRACE("str_fl",
|
||||||
if(is_trace_enabled("str_fl")) {
|
|
||||||
tout << "formulas asserted to bitvector subsolver:" << std::endl;
|
tout << "formulas asserted to bitvector subsolver:" << std::endl;
|
||||||
for (auto e : fixed_length_assumptions) {
|
for (auto e : fixed_length_assumptions) {
|
||||||
tout << mk_pp(e, subsolver.m()) << std::endl;
|
tout << mk_pp(e, subsolver.m()) << std::endl;
|
||||||
|
@ -969,7 +963,6 @@ namespace smt {
|
||||||
}
|
}
|
||||||
tout << std::endl;
|
tout << std::endl;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE("str_fl", tout << "calling subsolver" << std::endl;);
|
TRACE("str_fl", tout << "calling subsolver" << std::endl;);
|
||||||
|
@ -1002,12 +995,10 @@ namespace smt {
|
||||||
model.insert(var, strValue);
|
model.insert(var, strValue);
|
||||||
subst.insert(var, mk_string(strValue));
|
subst.insert(var, mk_string(strValue));
|
||||||
}
|
}
|
||||||
TRACE_CODE(
|
TRACE("str_fl",
|
||||||
if (is_trace_enabled("str_fl")) {
|
|
||||||
for (auto entry : model) {
|
for (auto entry : model) {
|
||||||
tout << mk_pp(entry.m_key, m) << " = " << entry.m_value << std::endl;
|
tout << mk_pp(entry.m_key, m) << " = " << entry.m_value << std::endl;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
);
|
);
|
||||||
for (auto entry : uninterpreted_to_char_subterm_map) {
|
for (auto entry : uninterpreted_to_char_subterm_map) {
|
||||||
svector<unsigned> assignment;
|
svector<unsigned> assignment;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue