3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

checkpoint

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2012-11-30 18:16:02 -08:00
parent 3e6bddbad1
commit 6195ed7c66
17 changed files with 120 additions and 326 deletions

View file

@ -25,12 +25,12 @@ Revision History:
#include"bv_simplifier_plugin.h"
#include"for_each_expr.h"
#include"well_sorted.h"
#include"pull_quant.h"
#include"pull_ite_tree.h"
#include"push_app_ite.h"
#include"elim_term_ite.h"
#include"pattern_inference.h"
#include"nnf.h"
#include"cnf.h"
#include"bv_elim.h"
#include"inj_axiom.h"
#include"der.h"
@ -86,22 +86,6 @@ void asserted_formulas::setup() {
if (m_params.m_relevancy_lvl == 0)
m_params.m_relevancy_lemma = false;
switch (m_params.m_cnf_mode) {
case CNF_QUANT:
if (m_params.m_nnf_mode == NNF_SKOLEM)
m_params.m_nnf_mode = NNF_QUANT;
break;
case CNF_OPPORTUNISTIC:
if (m_params.m_nnf_mode == NNF_SKOLEM)
m_params.m_nnf_mode = NNF_QUANT;
break;
case CNF_FULL:
m_params.m_nnf_mode = NNF_FULL;
break;
default:
break;
}
}
void asserted_formulas::setup_simplifier_plugins(simplifier & s, basic_simplifier_plugin * & bsimp, arith_simplifier_plugin * & asimp, bv_simplifier_plugin * & bvsimp) {
@ -439,13 +423,10 @@ void asserted_formulas::apply_quasi_macros() {
}
void asserted_formulas::nnf_cnf() {
IF_IVERBOSE(10, verbose_stream() << "applying nnf&cnf...\n";);
nnf apply_nnf(m_manager, m_defined_names, m_params);
cnf apply_cnf(m_manager, m_defined_names, m_params);
IF_IVERBOSE(10, verbose_stream() << "applying nnf...\n";);
nnf apply_nnf(m_manager, m_defined_names);
expr_ref_vector new_exprs(m_manager);
proof_ref_vector new_prs(m_manager);
expr_ref_vector cnf_todo(m_manager);
proof_ref_vector cnf_todo_prs(m_manager);
expr_ref_vector push_todo(m_manager);
proof_ref_vector push_todo_prs(m_manager);
@ -456,60 +437,33 @@ void asserted_formulas::nnf_cnf() {
expr * n = m_asserted_formulas.get(i);
TRACE("nnf_bug", tout << "processing:\n" << mk_pp(n, m_manager) << "\n";);
proof * pr = m_asserted_formula_prs.get(i, 0);
cnf_todo.reset();
cnf_todo_prs.reset();
expr_ref r1(m_manager);
proof_ref pr1(m_manager);
CASSERT("well_sorted",is_well_sorted(m_manager, n));
apply_nnf(n, cnf_todo, cnf_todo_prs, r1, pr1);
apply_nnf(n, push_todo, push_todo_prs, r1, pr1);
CASSERT("well_sorted",is_well_sorted(m_manager, r1));
pr = m_manager.mk_modus_ponens(pr, pr1);
cnf_todo.push_back(r1);
cnf_todo_prs.push_back(pr);
push_todo.push_back(r1);
push_todo_prs.push_back(pr);
if (canceled()) {
return;
}
unsigned sz1 = cnf_todo.size();
for (unsigned j = 0; j < sz1; j++) {
push_todo.reset();
push_todo_prs.reset();
unsigned sz2 = push_todo.size();
for (unsigned k = 0; k < sz2; k++) {
expr * n = push_todo.get(k);
proof * pr = 0;
m_simplifier(n, r1, pr1);
CASSERT("well_sorted",is_well_sorted(m_manager, r1));
if (canceled()) {
return;
}
expr * n = cnf_todo.get(j);
proof * pr = m_manager.proofs_enabled() ? cnf_todo_prs.get(j) : 0;
CASSERT("well_sorted",is_well_sorted(m_manager, n));
apply_cnf(n, push_todo, push_todo_prs, r1, pr1);
CASSERT("well_sorted",is_well_sorted(m_manager, r1));
push_todo.push_back(r1);
if (m_manager.proofs_enabled()) {
pr = m_manager.mk_modus_ponens(pr, pr1);
push_todo_prs.push_back(pr);
}
unsigned sz2 = push_todo.size();
for (unsigned k = 0; k < sz2; k++) {
expr * n = push_todo.get(k);
proof * pr = 0;
m_simplifier(n, r1, pr1);
CASSERT("well_sorted",is_well_sorted(m_manager, r1));
if (canceled()) {
return;
}
if (m_manager.proofs_enabled())
pr = m_manager.mk_modus_ponens(push_todo_prs.get(k), pr1);
else
pr = 0;
push_assertion(r1, pr, new_exprs, new_prs);
}
if (m_manager.proofs_enabled())
pr = m_manager.mk_modus_ponens(push_todo_prs.get(k), pr1);
else
pr = 0;
push_assertion(r1, pr, new_exprs, new_prs);
}
}
swap_asserted_formulas(new_exprs, new_prs);

View file

@ -654,10 +654,6 @@ namespace smt {
protected:
unsigned m_generation; //!< temporary variable used during internalization
bool expand_pos_def_only() const {
return m_fparams.m_nnf_mode == NNF_FULL && m_fparams.m_internalizer_nnf;
}
public:
bool binary_clause_opt_enabled() const {
return !m_manager.proofs_enabled() && m_fparams.m_binary_clause_opt;

View file

@ -1566,9 +1566,7 @@ namespace smt {
mk_gate_clause(~l, l_arg);
buffer.push_back(~l_arg);
}
if (!expand_pos_def_only()) {
mk_gate_clause(buffer.size(), buffer.c_ptr());
}
mk_gate_clause(buffer.size(), buffer.c_ptr());
}
void context::mk_or_cnstr(app * n) {
@ -1578,8 +1576,7 @@ namespace smt {
unsigned num_args = n->get_num_args();
for (unsigned i = 0; i < num_args; i++) {
literal l_arg = get_literal(n->get_arg(i));
if (!expand_pos_def_only())
mk_gate_clause(l, ~l_arg);
mk_gate_clause(l, ~l_arg);
buffer.push_back(l_arg);
}
mk_gate_clause(buffer.size(), buffer.c_ptr());