mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +00:00
string/sequence static features test
This commit is contained in:
parent
3fe49137d0
commit
54e28a4fe7
|
@ -278,6 +278,17 @@ public:
|
||||||
return is_sort_of(s, m_fid, _STRING_SORT);
|
return is_sort_of(s, m_fid, _STRING_SORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_non_string_sequence(expr const * n) const {
|
||||||
|
if (is_string_term(n))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sort * s = get_sort(n);
|
||||||
|
if (u.is_seq(s) && !u.is_string(s)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
MATCH_BINARY(is_concat);
|
MATCH_BINARY(is_concat);
|
||||||
MATCH_UNARY(is_length);
|
MATCH_UNARY(is_length);
|
||||||
MATCH_TERNARY(is_extract);
|
MATCH_TERNARY(is_extract);
|
||||||
|
|
|
@ -284,8 +284,9 @@ void static_features::update_core(expr * e) {
|
||||||
m_has_arrays = true;
|
m_has_arrays = true;
|
||||||
if (!m_has_str && m_sequtil.str.is_string_term(e))
|
if (!m_has_str && m_sequtil.str.is_string_term(e))
|
||||||
m_has_str = true;
|
m_has_str = true;
|
||||||
if (!m_has_seq_non_str && m_sequtil.is_seq(e))
|
if (!m_has_seq_non_str && m_sequtil.str.is_non_string_sequence(e)) {
|
||||||
m_has_seq_non_str = true;
|
m_has_seq_non_str = true;
|
||||||
|
}
|
||||||
if (is_app(e)) {
|
if (is_app(e)) {
|
||||||
family_id fid = to_app(e)->get_family_id();
|
family_id fid = to_app(e)->get_family_id();
|
||||||
mark_theory(fid);
|
mark_theory(fid);
|
||||||
|
|
|
@ -832,6 +832,7 @@ namespace smt {
|
||||||
m_context.register_plugin(alloc(theory_seq, m_manager));
|
m_context.register_plugin(alloc(theory_seq, m_manager));
|
||||||
} else if (m_params.m_string_solver == "auto") {
|
} else if (m_params.m_string_solver == "auto") {
|
||||||
if (st.m_has_seq_non_str) {
|
if (st.m_has_seq_non_str) {
|
||||||
|
NOT_IMPLEMENTED_YET();
|
||||||
m_context.register_plugin(alloc(theory_seq, m_manager));
|
m_context.register_plugin(alloc(theory_seq, m_manager));
|
||||||
} else {
|
} else {
|
||||||
setup_str();
|
setup_str();
|
||||||
|
@ -856,13 +857,15 @@ namespace smt {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup::setup_unknown() {
|
void setup::setup_unknown() {
|
||||||
|
static_features st(m_manager);
|
||||||
|
st.collect(m_context.get_num_asserted_formulas(), m_context.get_asserted_formulas());
|
||||||
|
|
||||||
setup_arith();
|
setup_arith();
|
||||||
setup_arrays();
|
setup_arrays();
|
||||||
setup_bv();
|
setup_bv();
|
||||||
setup_datatypes();
|
setup_datatypes();
|
||||||
setup_dl();
|
setup_dl();
|
||||||
// setup_seq()
|
setup_seq(st);
|
||||||
m_context.register_plugin(alloc(theory_seq, m_manager));
|
|
||||||
setup_card();
|
setup_card();
|
||||||
setup_fpa();
|
setup_fpa();
|
||||||
}
|
}
|
||||||
|
@ -966,7 +969,14 @@ namespace smt {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO setup_str() by features
|
if (st.num_theories() == 2 && st.m_has_str && !st.m_has_seq_non_str) {
|
||||||
|
setup_QF_S();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (st.num_theories() == 2 && st.m_has_seq_non_str) {
|
||||||
|
m_context.register_plugin(alloc(theory_seq, m_manager));
|
||||||
|
}
|
||||||
|
|
||||||
setup_unknown();
|
setup_unknown();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue