3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-27 08:28:44 +00:00

fix #3913 - change assumption tracking to be granular based on disabled guards

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-13 19:06:12 -07:00
parent e1027790ae
commit fe7146d93b
6 changed files with 102 additions and 73 deletions

View file

@ -32,7 +32,7 @@ namespace recfun {
enum op_kind {
OP_FUN_DEFINED, // defined function with one or more cases, possibly recursive
OP_FUN_CASE_PRED, // predicate guarding a given control flow path
OP_DEPTH_LIMIT, // predicate enforcing some depth limit
OP_NUM_ROUNDS // predicate round
};
/*! A predicate `p(t1...tn)`, that, if true, means `f(t1...tn)` is following
@ -226,7 +226,7 @@ namespace recfun {
bool is_defined(expr * e) const { return is_app_of(e, m_fid, OP_FUN_DEFINED); }
bool is_defined(func_decl* f) const { return is_decl_of(f, m_fid, OP_FUN_DEFINED); }
bool is_generated(func_decl* f) const { return is_defined(f) && f->get_parameter(0).get_int() == 1; }
bool is_depth_limit(expr * e) const { return is_app_of(e, m_fid, OP_DEPTH_LIMIT); }
bool is_num_rounds(expr * e) const { return is_app_of(e, m_fid, OP_NUM_ROUNDS); }
bool owns_app(app * e) const { return e->get_family_id() == m_fid; }
//<! don't use native theory if recursive function declarations are not populated with defs
@ -257,7 +257,7 @@ namespace recfun {
return m_plugin->get_rec_funs();
}
app_ref mk_depth_limit_pred(unsigned d);
app_ref mk_num_rounds_pred(unsigned d);
};
}