mirror of
https://github.com/Z3Prover/z3
synced 2025-08-02 09:20:22 +00:00
move to list of clauses
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
502e323678
commit
bfeb15b876
14 changed files with 104 additions and 83 deletions
|
@ -152,8 +152,8 @@ public:
|
|||
The cube corresponds to auxiliary assumptions. The clause as an auxiliary disjunction that is also
|
||||
assumed for the check.
|
||||
*/
|
||||
virtual lbool check_sat_cc(expr_ref_vector const& cube, expr_ref_vector const& clause) {
|
||||
if (clause.empty()) return check_sat(cube.size(), cube.c_ptr());
|
||||
virtual lbool check_sat_cc(expr_ref_vector const& cube, vector<expr_ref_vector> const& clauses) {
|
||||
if (clauses.empty()) return check_sat(cube.size(), cube.c_ptr());
|
||||
NOT_IMPLEMENTED_YET();
|
||||
}
|
||||
|
||||
|
|
|
@ -67,10 +67,10 @@ lbool solver_na2as::check_sat(unsigned num_assumptions, expr * const * assumptio
|
|||
return check_sat_core(m_assumptions.size(), m_assumptions.c_ptr());
|
||||
}
|
||||
|
||||
lbool solver_na2as::check_sat_cc(const expr_ref_vector &assumptions, const expr_ref_vector &clause) {
|
||||
if (clause.empty()) return check_sat(assumptions.size(), assumptions.c_ptr());
|
||||
lbool solver_na2as::check_sat_cc(const expr_ref_vector &assumptions, vector<expr_ref_vector> const &clauses) {
|
||||
if (clauses.empty()) return check_sat(assumptions.size(), assumptions.c_ptr());
|
||||
append_assumptions app(m_assumptions, assumptions.size(), assumptions.c_ptr());
|
||||
return check_sat_cc_core(m_assumptions, clause);
|
||||
return check_sat_cc_core(m_assumptions, clauses);
|
||||
}
|
||||
|
||||
lbool solver_na2as::get_consequences(expr_ref_vector const& asms, expr_ref_vector const& vars, expr_ref_vector& consequences) {
|
||||
|
|
|
@ -39,7 +39,7 @@ public:
|
|||
|
||||
// Subclasses of solver_na2as should redefine the following *_core methods instead of these ones.
|
||||
lbool check_sat(unsigned num_assumptions, expr * const * assumptions) override;
|
||||
lbool check_sat_cc(const expr_ref_vector &assumptions, const expr_ref_vector &clause) override;
|
||||
lbool check_sat_cc(const expr_ref_vector &assumptions, vector<expr_ref_vector> const &clauses) override;
|
||||
void push() override;
|
||||
void pop(unsigned n) override;
|
||||
unsigned get_scope_level() const override;
|
||||
|
@ -50,7 +50,7 @@ public:
|
|||
lbool find_mutexes(expr_ref_vector const& vars, vector<expr_ref_vector>& mutexes) override;
|
||||
protected:
|
||||
virtual lbool check_sat_core(unsigned num_assumptions, expr * const * assumptions) = 0;
|
||||
virtual lbool check_sat_cc_core(const expr_ref_vector &assumptions, const expr_ref_vector &clause) {NOT_IMPLEMENTED_YET();}
|
||||
virtual lbool check_sat_cc_core(const expr_ref_vector &assumptions, vector<expr_ref_vector> const &clauses) { NOT_IMPLEMENTED_YET(); }
|
||||
virtual void push_core() = 0;
|
||||
virtual void pop_core(unsigned n) = 0;
|
||||
};
|
||||
|
|
|
@ -144,14 +144,14 @@ public:
|
|||
|
||||
if (m_dump_benchmarks && sw.get_seconds() >= m_dump_threshold) {
|
||||
expr_ref_vector cube(m, num_assumptions, assumptions);
|
||||
expr_ref_vector clause(m);
|
||||
dump_benchmark(cube, clause, res, sw.get_seconds());
|
||||
vector<expr_ref_vector> clauses;
|
||||
dump_benchmark(cube, clauses, res, sw.get_seconds());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
lbool check_sat_cc_core(const expr_ref_vector &cube,
|
||||
const expr_ref_vector &clause) override {
|
||||
lbool check_sat_cc_core(expr_ref_vector const & cube,
|
||||
vector<expr_ref_vector> const & clauses) override {
|
||||
SASSERT(!m_pushed || get_scope_level() > 0);
|
||||
m_proof.reset();
|
||||
scoped_watch _t_(m_pool.m_check_watch);
|
||||
|
@ -160,7 +160,7 @@ public:
|
|||
stopwatch sw;
|
||||
sw.start();
|
||||
internalize_assertions();
|
||||
lbool res = m_base->check_sat_cc(cube, clause);
|
||||
lbool res = m_base->check_sat_cc(cube, clauses);
|
||||
sw.stop();
|
||||
switch (res) {
|
||||
case l_true:
|
||||
|
@ -177,7 +177,7 @@ public:
|
|||
set_status(res);
|
||||
|
||||
if (m_dump_benchmarks && sw.get_seconds() >= m_dump_threshold) {
|
||||
dump_benchmark(cube, clause, res, sw.get_seconds());
|
||||
dump_benchmark(cube, clauses, res, sw.get_seconds());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
void dump_benchmark(const expr_ref_vector &cube, const expr_ref_vector &clause,
|
||||
void dump_benchmark(const expr_ref_vector &cube, vector<expr_ref_vector> const & clauses,
|
||||
lbool last_status, double last_time) {
|
||||
std::string file_name = mk_file_name();
|
||||
std::ofstream out(file_name);
|
||||
|
@ -276,7 +276,7 @@ private:
|
|||
|
||||
out << "(set-info :status " << lbool2status(last_status) << ")\n";
|
||||
m_base->display(out, cube.size(), cube.c_ptr());
|
||||
if (!clause.empty()) {
|
||||
for (auto const& clause : clauses) {
|
||||
out << ";; extra clause\n";
|
||||
out << "(assert (or ";
|
||||
for (auto *lit : clause) out << mk_pp(lit, m) << " ";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue