mirror of
https://github.com/Z3Prover/z3
synced 2026-05-17 07:29:28 +00:00
cleanup service
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
cedd896ea5
commit
abbe36561d
4 changed files with 32 additions and 20 deletions
|
|
@ -1233,6 +1233,13 @@ namespace seq {
|
|||
return true;
|
||||
}
|
||||
|
||||
euf::snode* nielsen_graph::mk_rewrite(expr* e) {
|
||||
expr_ref er(e, m);
|
||||
th_rewriter rw(m);
|
||||
rw(er);
|
||||
return m_sg.mk(er);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// nielsen_graph: search
|
||||
// -----------------------------------------------------------------------
|
||||
|
|
@ -1875,7 +1882,7 @@ namespace seq {
|
|||
}
|
||||
euf::snode* replacement = dir_concat(m_sg, prefix_sn, var_node, fwd);
|
||||
nielsen_subst s(var_node, replacement,
|
||||
m_sg.mk(a.mk_sub(compute_length_expr(var_node), compute_length_expr(prefix_sn))),
|
||||
mk_rewrite(a.mk_sub(compute_length_expr(var_node), compute_length_expr(prefix_sn))),
|
||||
eq.m_dep);
|
||||
nielsen_node* child = mk_child(node);
|
||||
nielsen_edge* e = mk_edge(node, child, true);
|
||||
|
|
@ -1943,7 +1950,7 @@ namespace seq {
|
|||
euf::snode* replacement = dir_concat(m_sg, char_head, var_head, fwd);
|
||||
child = mk_child(node);
|
||||
e = mk_edge(node, child, false);
|
||||
nielsen_subst s2(var_head, replacement, m_sg.mk(a.mk_sub(compute_length_expr(var_head), a.mk_int(1))), eq.m_dep);
|
||||
nielsen_subst s2(var_head, replacement, mk_rewrite(a.mk_sub(compute_length_expr(var_head), a.mk_int(1))), eq.m_dep);
|
||||
e->add_subst(s2);
|
||||
child->apply_subst(m_sg, s2);
|
||||
return true;
|
||||
|
|
@ -1992,7 +1999,7 @@ namespace seq {
|
|||
nielsen_node* child = mk_child(node);
|
||||
nielsen_edge* e = mk_edge(node, child, false);
|
||||
nielsen_subst s(lhead, replacement,
|
||||
m_sg.mk(a.mk_sub(compute_length_expr(lhead), compute_length_expr(rhead))),
|
||||
mk_rewrite(a.mk_sub(compute_length_expr(lhead), compute_length_expr(rhead))),
|
||||
eq.m_dep);
|
||||
e->add_subst(s);
|
||||
child->apply_subst(m_sg, s);
|
||||
|
|
@ -2003,7 +2010,7 @@ namespace seq {
|
|||
nielsen_node* child = mk_child(node);
|
||||
nielsen_edge* e = mk_edge(node, child, false);
|
||||
nielsen_subst s(rhead, replacement,
|
||||
m_sg.mk(a.mk_sub(compute_length_expr(rhead), compute_length_expr(lhead))),
|
||||
mk_rewrite(a.mk_sub(compute_length_expr(rhead), compute_length_expr(lhead))),
|
||||
eq.m_dep);
|
||||
e->add_subst(s);
|
||||
child->apply_subst(m_sg, s);
|
||||
|
|
@ -3469,7 +3476,7 @@ namespace seq {
|
|||
euf::snode* replacement = m_sg.mk_concat(fresh_char, first);
|
||||
nielsen_node* child = mk_child(node);
|
||||
nielsen_edge* e = mk_edge(node, child, false);
|
||||
nielsen_subst s(first, replacement, m_sg.mk(a.mk_sub(compute_length_expr(first), a.mk_int(1))), mem.m_dep);
|
||||
nielsen_subst s(first, replacement, mk_rewrite(a.mk_sub(compute_length_expr(first), a.mk_int(1))), mem.m_dep);
|
||||
e->add_subst(s);
|
||||
child->apply_subst(m_sg, s);
|
||||
// Constrain fresh_char to the character class of this minterm.
|
||||
|
|
@ -3755,8 +3762,9 @@ namespace seq {
|
|||
}
|
||||
|
||||
euf::snode *length_term = nullptr;
|
||||
if (m_length_info.find(n->id(), length_term) && length_term)
|
||||
if (m_length_info.find(n->id(), length_term) && length_term)
|
||||
return expr_ref(length_term->get_expr(), m);
|
||||
|
||||
return expr_ref(m_seq.str.mk_length(n->get_expr()), m);
|
||||
}
|
||||
|
||||
|
|
@ -3962,7 +3970,7 @@ namespace seq {
|
|||
auto& c = node->constraints()[i];
|
||||
m_solver.assert_expr(c.fml);
|
||||
auto lit = m_literal_if_false(c.fml);
|
||||
std::cout << "Internalizing literal " << mk_pp(c.fml, m) << " [" << (lit == sat::null_literal) << "]" << std::endl;
|
||||
// std::cout << "Internalizing literal " << mk_pp(c.fml, m) << " [" << (lit == sat::null_literal) << "]" << std::endl;
|
||||
if (lit != sat::null_literal)
|
||||
node->set_external_conflict(lit, c.dep);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1038,6 +1038,9 @@ namespace seq {
|
|||
// only once per node across DFS iterations.
|
||||
void apply_parikh_to_node(nielsen_node& node);
|
||||
|
||||
// simplify expression and create a node from simplified expression.
|
||||
euf::snode *mk_rewrite(expr *e);
|
||||
|
||||
// create a fresh variable with a unique name and the given sequence sort
|
||||
euf::snode* mk_fresh_var(sort* s);
|
||||
|
||||
|
|
|
|||
|
|
@ -735,7 +735,7 @@ namespace smt {
|
|||
}
|
||||
}
|
||||
|
||||
std::cout << "[" << m_num_final_checks << "]" << std::endl;
|
||||
// std::cout << "[" << m_num_final_checks << "]" << std::endl;
|
||||
IF_VERBOSE(1, verbose_stream() << "nseq final_check: calling solve()\n";);
|
||||
|
||||
// here the actual Nielsen solving happens
|
||||
|
|
@ -802,7 +802,7 @@ namespace smt {
|
|||
bool all_sat = true;
|
||||
ctx.push_trail(reset_vector(m_nielsen_literals));
|
||||
for (auto const& c : m_nielsen.sat_node()->constraints()) {
|
||||
std::cout << "Assumption: " << mk_pp(c.fml, m) << std::endl;
|
||||
// std::cout << "Assumption: " << mk_pp(c.fml, m) << std::endl;
|
||||
auto lit = mk_literal(c.fml);
|
||||
m_nielsen_literals.push_back(lit);
|
||||
// Ensure Nielsen assumptions participate in SAT search instead of
|
||||
|
|
@ -827,7 +827,7 @@ namespace smt {
|
|||
// or maybe it can happen if we have a "le" dependency
|
||||
TRACE(seq, tout << "nseq final_check: nielsen assumption " << c.fml << " is false; internalized - " << ctx.e_internalized(c.fml) << "\n");
|
||||
all_sat = false;
|
||||
std::cout << "False [" << lit << "]: " << mk_pp(c.fml, m) << std::endl;
|
||||
// std::cout << "False [" << lit << "]: " << mk_pp(c.fml, m) << std::endl;
|
||||
ctx.push_trail(value_trail(m_should_internalize));
|
||||
m_should_internalize = true;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue