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:
parent
7f0d9157ac
commit
dc86385e7f
4 changed files with 62 additions and 2 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue