3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 11:25:51 +00:00

add Length function to theory of strings

This commit is contained in:
Murphy Berzish 2015-09-07 16:13:48 -04:00
parent 7f0d9157ac
commit dc86385e7f
4 changed files with 62 additions and 2 deletions

View file

@ -31,7 +31,7 @@ theory_str::~theory_str() {
bool theory_str::internalize_atom(app * atom, bool gate_ctx) {
// TODO I have no idea if this is correct.
TRACE("t_str", tout << "internalizing atom: " << mk_ismt2_pp(atom, get_manager()) << "\n";);
TRACE("t_str", tout << "internalizing atom: " << mk_ismt2_pp(atom, get_manager()) << std::endl;);
SASSERT(atom->get_family_id() == get_family_id());
ast_manager & m = get_manager();
@ -54,7 +54,7 @@ bool theory_str::internalize_term(app * term) {
// TODO I have no idea if this is correct either.
ast_manager & m = get_manager();
context & ctx = get_context();
TRACE("t_str", tout << "internalizing term: " << mk_ismt2_pp(term, get_manager()) << "\n";);
TRACE("t_str", tout << "internalizing term: " << mk_ismt2_pp(term, get_manager()) << std::endl;);
SASSERT(term->get_family_id() == get_family_id());
SASSERT(!ctx.e_internalized(term));
@ -80,6 +80,20 @@ void theory_str::attach_new_th_var(enode * n) {
TRACE("t_str_detail", tout << "new theory var: " << mk_ismt2_pp(n->get_owner(), get_manager()) << " := " << v << "\n";);
}
void theory_str::init_search_eh() {
ast_manager & m = get_manager();
context & ctx = get_context();
TRACE("t_str",
tout << "search started, assignments are:" << std::endl;
expr_ref_vector assignment(m);
ctx.get_assignments(assignment);
for (expr_ref_vector::iterator i = assignment.begin(); i != assignment.end(); ++i) {
expr * ex = *i;
tout << mk_ismt2_pp(ex, m) << std::endl;
}
);
}
void theory_str::new_eq_eh(theory_var x, theory_var y) {
// TODO
TRACE("t_str", tout << "new eq: " << x << " = " << y << std::endl;);
@ -94,4 +108,23 @@ void theory_str::new_diseq_eh(theory_var x, theory_var y) {
mk_ismt2_pp(get_enode(y)->get_owner(), get_manager()) << std::endl;);
}
void theory_str::relevant_eh(app * n) {
TRACE("t_str", tout << "relevant: " << mk_ismt2_pp(n, get_manager()) << "\n";);
}
void theory_str::assign_eh(bool_var v, bool is_true) {
context & ctx = get_context();
TRACE("t_str", tout << "assert: v" << v << " #" << ctx.bool_var2expr(v)->get_id() << " is_true: " << is_true << "\n";);
}
void theory_str::push_scope_eh() {
TRACE("t_str", tout << "push" << std::endl;);
}
final_check_status theory_str::final_check_eh() {
// TODO
TRACE("t_str", tout << "final check" << std::endl;);
return FC_DONE;
}
}; /* namespace smt */