mirror of
https://github.com/Z3Prover/z3
synced 2025-04-07 18:05:21 +00:00
fix #5032, reset substitution during fold transformation
This commit is contained in:
parent
6bd02e122b
commit
c387863da1
|
@ -2453,6 +2453,12 @@ typedef obj_ref<app, ast_manager> app_ref;
|
|||
typedef obj_ref<var,ast_manager> var_ref;
|
||||
typedef app_ref proof_ref;
|
||||
|
||||
inline expr_ref operator~(expr_ref const & e) {
|
||||
if (e.m().is_not(e))
|
||||
return expr_ref(to_app(e)->get_arg(0), e.m());
|
||||
return expr_ref(e.m().mk_not(e), e.m());
|
||||
}
|
||||
|
||||
// -----------------------------------
|
||||
//
|
||||
// ast_vector (smart pointer vector)
|
||||
|
|
|
@ -496,6 +496,7 @@ namespace recfun {
|
|||
if (max_score <= 4)
|
||||
break;
|
||||
|
||||
|
||||
ptr_vector<sort> domain;
|
||||
ptr_vector<expr> args;
|
||||
for (unsigned i = 0; i < n; ++i) {
|
||||
|
@ -508,9 +509,10 @@ namespace recfun {
|
|||
func_decl* f = pd.get_def()->get_decl();
|
||||
expr_ref new_body(m().mk_app(f, n, args.c_ptr()), m());
|
||||
set_definition(subst, pd, n, vars, max_expr);
|
||||
subst.reset();
|
||||
subst.insert(max_expr, new_body);
|
||||
result = subst(result);
|
||||
TRACEFN("substituted\n" << mk_pp(max_expr, m()) << "\n->\n" << new_body << "\n" << result);
|
||||
TRACEFN("substituted\n" << mk_pp(max_expr, m()) << "\n->\n" << new_body << "\n-result->\n" << result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -258,7 +258,7 @@ namespace smt {
|
|||
for (unsigned v = get_num_vars(); v-- > 0; ) {
|
||||
expr* e = get_expr(v);
|
||||
if (seq.is_char(e) && m_var2value[v] == UINT_MAX && get_char_value(v, c)) {
|
||||
CTRACE("seq", seq.is_char(e), tout << mk_pp(e, m) << " root: " << get_enode(v)->is_root() << " is_value: " << get_char_value(v, c) << "\n";);
|
||||
CTRACE("seq_verbose", seq.is_char(e), tout << mk_pp(e, m) << " root: " << get_enode(v)->is_root() << " is_value: " << get_char_value(v, c) << "\n";);
|
||||
enode* r = get_enode(v)->get_root();
|
||||
m_value2var.reserve(c + 1, null_theory_var);
|
||||
theory_var u = m_value2var[c];
|
||||
|
|
Loading…
Reference in a new issue