mirror of
https://github.com/Z3Prover/z3
synced 2025-08-15 07:15:26 +00:00
solve for fold, expand rewrites under fold/map
Occurrences of map and fold are interpreted. They are defined when the seq argument is expanded into a finite concatenation. The ensure this expansion takes place, each fold/map term is registered and defined through rewrites when the seq argument simplifies.
This commit is contained in:
parent
53611f47df
commit
809838fede
2 changed files with 84 additions and 20 deletions
|
@ -328,6 +328,7 @@ namespace smt {
|
|||
scoped_vector<ne> m_nqs; // set of current disequalities.
|
||||
scoped_vector<nc> m_ncs; // set of non-contains constraints.
|
||||
scoped_vector<expr*> m_lts; // set of asserted str.<, str.<= literals
|
||||
scoped_vector<expr*> m_recfuns; // set of recursive functions that are defined by unfolding seq argument (map/fold)
|
||||
bool m_lts_checked;
|
||||
unsigned m_eq_id;
|
||||
th_union_find m_find;
|
||||
|
@ -484,6 +485,7 @@ namespace smt {
|
|||
bool solve_nqs(unsigned i);
|
||||
bool solve_ne(unsigned i);
|
||||
bool solve_nc(unsigned i);
|
||||
bool solve_recfuns();
|
||||
bool check_ne_literals(unsigned idx, unsigned& num_undef_lits);
|
||||
bool propagate_ne2lit(unsigned idx);
|
||||
bool propagate_ne2eq(unsigned idx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue