mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
add clause proof module, small improvements to bapa
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
4d30639fd7
commit
48fc3d752e
36 changed files with 722 additions and 250 deletions
|
@ -188,6 +188,14 @@ public:
|
|||
return m_manager.mk_app(m_fid, OP_SELECT, 0, nullptr, num_args, args);
|
||||
}
|
||||
|
||||
app * mk_select(ptr_vector<expr> const& args) {
|
||||
return mk_select(args.size(), args.c_ptr());
|
||||
}
|
||||
|
||||
app * mk_select(expr_ref_vector const& args) {
|
||||
return mk_select(args.size(), args.c_ptr());
|
||||
}
|
||||
|
||||
app * mk_map(func_decl * f, unsigned num_args, expr * const * args) {
|
||||
parameter p(f);
|
||||
return m_manager.mk_app(m_fid, OP_ARRAY_MAP, 1, &p, num_args, args);
|
||||
|
@ -229,6 +237,10 @@ public:
|
|||
return m_manager.mk_app(m_fid, OP_SET_HAS_SIZE, set, n);
|
||||
}
|
||||
|
||||
app* mk_card(expr* set) {
|
||||
return m_manager.mk_app(m_fid, OP_SET_CARD, set);
|
||||
}
|
||||
|
||||
func_decl * mk_array_ext(sort* domain, unsigned i);
|
||||
|
||||
sort * mk_array_sort(sort* dom, sort* range) { return mk_array_sort(1, &dom, range); }
|
||||
|
|
|
@ -738,7 +738,13 @@ basic_decl_plugin::basic_decl_plugin():
|
|||
m_iff_oeq_decl(nullptr),
|
||||
m_skolemize_decl(nullptr),
|
||||
m_mp_oeq_decl(nullptr),
|
||||
m_hyper_res_decl0(nullptr) {
|
||||
m_hyper_res_decl0(nullptr),
|
||||
m_assumption_add_decl(nullptr),
|
||||
m_lemma_add_decl(nullptr),
|
||||
m_th_assumption_add_decl(nullptr),
|
||||
m_th_lemma_add_decl(nullptr),
|
||||
m_redundant_del_decl(nullptr),
|
||||
m_clause_trail_decl(nullptr) {
|
||||
}
|
||||
|
||||
bool basic_decl_plugin::check_proof_sorts(basic_op_kind k, unsigned arity, sort * const * domain) const {
|
||||
|
@ -908,6 +914,12 @@ func_decl * basic_decl_plugin::mk_proof_decl(basic_op_kind k, unsigned num_paren
|
|||
case PR_MODUS_PONENS_OEQ: return mk_proof_decl("mp~", k, 2, m_mp_oeq_decl);
|
||||
case PR_TH_LEMMA: return mk_proof_decl("th-lemma", k, num_parents, m_th_lemma_decls);
|
||||
case PR_HYPER_RESOLVE: return mk_proof_decl("hyper-res", k, num_parents, m_hyper_res_decl0);
|
||||
case PR_ASSUMPTION_ADD: return mk_proof_decl("add-assume", k, num_parents, m_assumption_add_decl);
|
||||
case PR_LEMMA_ADD: return mk_proof_decl("add-lemma", k, num_parents, m_lemma_add_decl);
|
||||
case PR_TH_ASSUMPTION_ADD: return mk_proof_decl("add-th-assume", k, num_parents, m_th_assumption_add_decl);
|
||||
case PR_TH_LEMMA_ADD: return mk_proof_decl("add-th-lemma", k, num_parents, m_th_lemma_add_decl);
|
||||
case PR_REDUNDANT_DEL: return mk_proof_decl("del-redundant", k, num_parents, m_redundant_del_decl);
|
||||
case PR_CLAUSE_TRAIL: return mk_proof_decl("proof-trail", k, num_parents, m_clause_trail_decl);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return nullptr;
|
||||
|
@ -1023,6 +1035,12 @@ void basic_decl_plugin::finalize() {
|
|||
DEC_REF(m_iff_oeq_decl);
|
||||
DEC_REF(m_skolemize_decl);
|
||||
DEC_REF(m_mp_oeq_decl);
|
||||
DEC_REF(m_assumption_add_decl);
|
||||
DEC_REF(m_lemma_add_decl);
|
||||
DEC_REF(m_th_assumption_add_decl);
|
||||
DEC_REF(m_th_lemma_add_decl);
|
||||
DEC_REF(m_redundant_del_decl);
|
||||
DEC_REF(m_clause_trail_decl);
|
||||
DEC_ARRAY_REF(m_apply_def_decls);
|
||||
DEC_ARRAY_REF(m_nnf_pos_decls);
|
||||
DEC_ARRAY_REF(m_nnf_neg_decls);
|
||||
|
@ -3277,6 +3295,39 @@ proof * ast_manager::mk_not_or_elim(proof * p, unsigned i) {
|
|||
return mk_app(m_basic_family_id, PR_NOT_OR_ELIM, p, f);
|
||||
}
|
||||
|
||||
proof* ast_manager::mk_clause_trail_elem(proof *pr, expr* e, decl_kind k) {
|
||||
ptr_buffer<expr> args;
|
||||
if (pr) args.push_back(pr);
|
||||
args.push_back(e);
|
||||
return mk_app(m_basic_family_id, k, 0, nullptr, args.size(), args.c_ptr());
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_assumption_add(proof* pr, expr* e) {
|
||||
return mk_clause_trail_elem(pr, e, PR_ASSUMPTION_ADD);
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_lemma_add(proof* pr, expr* e) {
|
||||
return mk_clause_trail_elem(pr, e, PR_LEMMA_ADD);
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_th_assumption_add(proof* pr, expr* e) {
|
||||
return mk_clause_trail_elem(pr, e, PR_TH_ASSUMPTION_ADD);
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_th_lemma_add(proof* pr, expr* e) {
|
||||
return mk_clause_trail_elem(pr, e, PR_TH_LEMMA_ADD);
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_redundant_del(expr* e) {
|
||||
return mk_clause_trail_elem(nullptr, e, PR_REDUNDANT_DEL);
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_clause_trail(unsigned n, proof* const* ps) {
|
||||
ptr_buffer<expr> args;
|
||||
args.append(n, (expr**) ps);
|
||||
args.push_back(mk_false());
|
||||
return mk_app(m_basic_family_id, PR_CLAUSE_TRAIL, 0, nullptr, args.size(), args.c_ptr());
|
||||
}
|
||||
|
||||
proof * ast_manager::mk_th_lemma(
|
||||
family_id tid,
|
||||
|
|
|
@ -19,6 +19,7 @@ Revision History:
|
|||
#ifndef AST_H_
|
||||
#define AST_H_
|
||||
|
||||
|
||||
#include "util/vector.h"
|
||||
#include "util/hashtable.h"
|
||||
#include "util/buffer.h"
|
||||
|
@ -1105,6 +1106,8 @@ enum basic_op_kind {
|
|||
|
||||
PR_HYPOTHESIS, PR_LEMMA, PR_UNIT_RESOLUTION, PR_IFF_TRUE, PR_IFF_FALSE, PR_COMMUTATIVITY, PR_DEF_AXIOM,
|
||||
|
||||
PR_ASSUMPTION_ADD, PR_TH_ASSUMPTION_ADD, PR_LEMMA_ADD, PR_TH_LEMMA_ADD, PR_REDUNDANT_DEL, PR_CLAUSE_TRAIL,
|
||||
|
||||
PR_DEF_INTRO, PR_APPLY_DEF, PR_IFF_OEQ, PR_NNF_POS, PR_NNF_NEG, PR_SKOLEMIZE,
|
||||
PR_MODUS_PONENS_OEQ, PR_TH_LEMMA, PR_HYPER_RESOLVE, LAST_BASIC_PR
|
||||
};
|
||||
|
@ -1159,6 +1162,12 @@ protected:
|
|||
func_decl * m_iff_oeq_decl;
|
||||
func_decl * m_skolemize_decl;
|
||||
func_decl * m_mp_oeq_decl;
|
||||
func_decl * m_assumption_add_decl;
|
||||
func_decl * m_lemma_add_decl;
|
||||
func_decl * m_th_assumption_add_decl;
|
||||
func_decl * m_th_lemma_add_decl;
|
||||
func_decl * m_redundant_del_decl;
|
||||
func_decl * m_clause_trail_decl;
|
||||
ptr_vector<func_decl> m_apply_def_decls;
|
||||
ptr_vector<func_decl> m_nnf_pos_decls;
|
||||
ptr_vector<func_decl> m_nnf_neg_decls;
|
||||
|
@ -2298,6 +2307,14 @@ public:
|
|||
proof * mk_der(quantifier * q, expr * r);
|
||||
proof * mk_quant_inst(expr * not_q_or_i, unsigned num_bind, expr* const* binding);
|
||||
|
||||
proof * mk_clause_trail_elem(proof* p, expr* e, decl_kind k);
|
||||
proof * mk_assumption_add(proof* pr, expr* e);
|
||||
proof * mk_lemma_add(proof* pr, expr* e);
|
||||
proof * mk_th_assumption_add(proof* pr, expr* e);
|
||||
proof * mk_th_lemma_add(proof* pr, expr* e);
|
||||
proof * mk_redundant_del(expr* e);
|
||||
proof * mk_clause_trail(unsigned n, proof* const* ps);
|
||||
|
||||
proof * mk_def_axiom(expr * ax);
|
||||
proof * mk_unit_resolution(unsigned num_proofs, proof * const * proofs);
|
||||
proof * mk_unit_resolution(unsigned num_proofs, proof * const * proofs, expr * new_fact);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue