3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-14 06:45:25 +00:00

replay mk_extract/mk_concat

This commit is contained in:
Jakob Rath 2023-07-25 10:49:47 +02:00
parent 2226f508e8
commit a75daf8681
3 changed files with 117 additions and 14 deletions

View file

@ -214,12 +214,22 @@ namespace polysat {
add_var,
split_core,
mk_extract,
mk_concat,
};
svector<trail_item> m_trail;
enode_vector m_split_trail;
svector<extract_args> m_extract_trail;
unsigned_vector m_scopes;
struct concat_info {
pvar v;
unsigned num_args;
unsigned args_idx;
unsigned next_args_idx() const { args_idx + num_args; }
};
svector<concat_info> m_concat_trail;
svector<pvar> m_concat_args;
void undo_add_var();
void undo_split_core();
void undo_mk_extract();
@ -232,7 +242,12 @@ namespace polysat {
uint_set m_marked_vars;
/** Get variable representing src[hi:lo] */
pvar mk_extract(enode* src, unsigned hi, unsigned lo);
pvar mk_extract(enode* src, unsigned hi, unsigned lo, pvar replay_var = null_var);
/** Restore r = src[hi:lo] */
void replay_extract(extract_args const& args, pvar r);
pvar mk_concat(unsigned num_args, pvar const* args, pvar replay_var);
void replay_concat(unsigned num_args, pvar const* args, pvar r);
bool add_equation(pvar x, pdd const& body, sat::literal lit);
@ -254,7 +269,7 @@ namespace polysat {
pvar mk_extract(pvar x, unsigned hi, unsigned lo);
/** Get or create variable representing x1 ++ x2 ++ ... ++ xn */
pvar mk_concat(unsigned num_args, pvar const* args);
pvar mk_concat(unsigned num_args, pvar const* args) { return mk_concat(num_args, args, null_var); }
pvar mk_concat(std::initializer_list<pvar> args);
// Track value assignments to variables (and propagate to subslices)