mirror of
https://github.com/Z3Prover/z3
synced 2025-05-03 22:05:45 +00:00
overhaul of regular expression membership solving. Use iterative deepening and propagation, coallesce intersections
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
d61d9d4ce3
commit
6ddbc9cd38
5 changed files with 200 additions and 252 deletions
|
@ -1750,20 +1750,25 @@ struct contains_underspecified_op_proc {
|
|||
struct found {};
|
||||
family_id m_array_fid;
|
||||
datatype_util m_dt;
|
||||
seq_util m_seq;
|
||||
family_id m_seq_id;
|
||||
|
||||
contains_underspecified_op_proc(ast_manager & m):m_array_fid(m.mk_family_id("array")), m_dt(m) {}
|
||||
contains_underspecified_op_proc(ast_manager & m):m_array_fid(m.mk_family_id("array")), m_dt(m), m_seq(m), m_seq_id(m_seq.get_family_id()) {}
|
||||
void operator()(var * n) {}
|
||||
void operator()(app * n) {
|
||||
if (m_dt.is_accessor(n->get_decl()))
|
||||
throw found();
|
||||
if (n->get_family_id() != m_array_fid)
|
||||
return;
|
||||
decl_kind k = n->get_decl_kind();
|
||||
if (k == OP_AS_ARRAY ||
|
||||
k == OP_STORE ||
|
||||
k == OP_ARRAY_MAP ||
|
||||
k == OP_CONST_ARRAY)
|
||||
if (n->get_family_id() == m_array_fid) {
|
||||
decl_kind k = n->get_decl_kind();
|
||||
if (k == OP_AS_ARRAY ||
|
||||
k == OP_STORE ||
|
||||
k == OP_ARRAY_MAP ||
|
||||
k == OP_CONST_ARRAY)
|
||||
throw found();
|
||||
}
|
||||
if (n->get_family_id() == m_seq_id && m_seq.is_re(n)) {
|
||||
throw found();
|
||||
}
|
||||
}
|
||||
void operator()(quantifier * n) {}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue