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:
parent
92b5301b7f
commit
3de8c193ea
63 changed files with 482 additions and 294 deletions
|
@ -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"),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue