3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-25 10:05:32 +00:00

implementing model updates

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-10-30 16:11:51 -05:00
parent 92b5301b7f
commit 3de8c193ea
63 changed files with 482 additions and 294 deletions

View file

@ -96,6 +96,8 @@ namespace smt2 {
symbol m_check_sat;
symbol m_define_fun;
symbol m_define_const;
symbol m_model_add;
symbol m_model_del;
symbol m_declare_fun;
symbol m_declare_const;
symbol m_define_sort;
@ -2179,9 +2181,9 @@ namespace smt2 {
next();
}
void parse_define_fun() {
void parse_define(bool is_fun) {
SASSERT(curr_is_identifier());
SASSERT(curr_id() == m_define_fun);
SASSERT(curr_id() == (is_fun ? m_define_fun : m_model_add));
SASSERT(m_num_bindings == 0);
next();
check_identifier("invalid function/constant definition, symbol expected");
@ -2195,7 +2197,10 @@ namespace smt2 {
parse_expr();
if (m().get_sort(expr_stack().back()) != sort_stack().back())
throw parser_exception("invalid function/constant definition, sort mismatch");
m_ctx.insert(id, num_vars, sort_stack().c_ptr() + sort_spos, expr_stack().back());
if (is_fun)
m_ctx.insert(id, num_vars, sort_stack().c_ptr() + sort_spos, expr_stack().back());
else
m_ctx.model_add(id, num_vars, sort_stack().c_ptr() + sort_spos, expr_stack().back());
check_rparen("invalid function/constant definition, ')' expected");
// restore stacks & env
symbol_stack().shrink(sym_spos);
@ -2208,6 +2213,22 @@ namespace smt2 {
next();
}
void parse_define_fun() {
parse_define(true);
}
void parse_model_add() {
parse_define(false);
}
void parse_model_del() {
func_decl* f = parse_func_decl_ref();
check_rparen("invalid model-del, ')' expected");
m_ctx.model_del(f);
m_ctx.print_success();
next();
}
void parse_define_fun_rec() {
// ( define-fun-rec hfun_defi )
SASSERT(curr_is_identifier());
@ -2910,6 +2931,14 @@ namespace smt2 {
parse_define_funs_rec();
return;
}
if (s == m_model_add) {
parse_model_add();
return;
}
if (s == m_model_del) {
parse_model_del();
return;
}
parse_ext_cmd(line, pos);
}
@ -2941,6 +2970,8 @@ namespace smt2 {
m_check_sat("check-sat"),
m_define_fun("define-fun"),
m_define_const("define-const"),
m_model_add("model-add"),
m_model_del("model-del"),
m_declare_fun("declare-fun"),
m_declare_const("declare-const"),
m_define_sort("define-sort"),