mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 09:35:32 +00:00
move qhead to attribute on the state instead of the simplifier,
- add sat.smt option to enable the new incremental core (it is not ready for mainstream consumption as cloning and other features are not implemented and it hasn't been tested in any detail yet). - move "name" into attribute on simplifier so it can be reused for diagnostics by the seq-simplifier.
This commit is contained in:
parent
ac023935a3
commit
dd1ca8f6bd
37 changed files with 132 additions and 85 deletions
|
@ -30,7 +30,7 @@ public:
|
|||
};
|
||||
|
||||
inline tactic* mk_card2bv_tactic(ast_manager& m, params_ref const& p = params_ref()) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(card2bv_tactic_factory), "card2bv");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(card2bv_tactic_factory));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,5 +29,5 @@ public:
|
|||
};
|
||||
|
||||
tactic* mk_bv_slice_tactic(ast_manager& m, params_ref const& p) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(bv_slice_factory), "bv-slice");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(bv_slice_factory));
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public:
|
|||
};
|
||||
|
||||
inline tactic* mk_max_bv_sharing_tactic(ast_manager& m, params_ref const& p = params_ref()) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(max_bv_sharing_tactic_factory), "max-bv-sharing");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(max_bv_sharing_tactic_factory));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
};
|
||||
|
||||
inline tactic * mk_elim_uncnstr2_tactic(ast_manager & m, params_ref const & p = params_ref()) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(elim_uncnstr2_tactic_factory), "elim-uncnstr2");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(elim_uncnstr2_tactic_factory));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@ Author:
|
|||
#pragma once
|
||||
|
||||
#include "util/params.h"
|
||||
#include "ast/simplifiers/eliminate_predicates.h"
|
||||
#include "tactic/tactic.h"
|
||||
#include "tactic/dependent_expr_state_tactic.h"
|
||||
#include "ast/simplifiers/eliminate_predicates.h"
|
||||
|
||||
|
||||
class eliminate_predicates_tactic_factory : public dependent_expr_simplifier_factory {
|
||||
|
@ -30,7 +30,7 @@ public:
|
|||
};
|
||||
|
||||
inline tactic * mk_eliminate_predicates_tactic(ast_manager& m, params_ref const& p = params_ref()) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(eliminate_predicates_tactic_factory), "elim-predicates");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(eliminate_predicates_tactic_factory));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -28,5 +28,5 @@ public:
|
|||
};
|
||||
|
||||
tactic * mk_euf_completion_tactic(ast_manager& m, params_ref const& p) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(euf_completion_tactic_factory), "euf-completion");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(euf_completion_tactic_factory));
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
};
|
||||
|
||||
inline tactic * mk_propagate_values2_tactic(ast_manager & m, params_ref const & p = params_ref()) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(propagate_values2_tactic_factory), "propagate-values2");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(propagate_values2_tactic_factory));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ public:
|
|||
};
|
||||
|
||||
inline tactic * mk_solve_eqs_tactic(ast_manager& m, params_ref const& p = params_ref()) {
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(solve_eqs_tactic_factory), "solve-eqs");
|
||||
return alloc(dependent_expr_state_tactic, m, p, alloc(solve_eqs_tactic_factory));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -22,7 +22,6 @@ Author:
|
|||
class dependent_expr_state_tactic : public tactic, public dependent_expr_state {
|
||||
ast_manager& m;
|
||||
params_ref m_params;
|
||||
std::string m_name;
|
||||
trail_stack m_trail;
|
||||
goal_ref m_goal;
|
||||
dependent_expr m_dep;
|
||||
|
@ -42,10 +41,9 @@ class dependent_expr_state_tactic : public tactic, public dependent_expr_state {
|
|||
|
||||
public:
|
||||
|
||||
dependent_expr_state_tactic(ast_manager& m, params_ref const& p, dependent_expr_simplifier_factory* f, char const* name):
|
||||
dependent_expr_state_tactic(ast_manager& m, params_ref const& p, dependent_expr_simplifier_factory* f):
|
||||
m(m),
|
||||
m_params(p),
|
||||
m_name(name),
|
||||
m_factory(f),
|
||||
m_simp(nullptr),
|
||||
m_dep(m, m.mk_true(), nullptr)
|
||||
|
@ -79,7 +77,7 @@ public:
|
|||
return *m_model_trail;
|
||||
}
|
||||
|
||||
char const* name() const override { return m_name.c_str(); }
|
||||
char const* name() const override { return m_simp?m_simp->name():"null"; }
|
||||
|
||||
void updt_params(params_ref const & p) override {
|
||||
m_params.append(p);
|
||||
|
@ -93,7 +91,7 @@ public:
|
|||
}
|
||||
|
||||
tactic * translate(ast_manager & m) override {
|
||||
return alloc(dependent_expr_state_tactic, m, m_params, m_factory.get(), name());
|
||||
return alloc(dependent_expr_state_tactic, m, m_params, m_factory.get());
|
||||
}
|
||||
|
||||
void operator()(goal_ref const & in,
|
||||
|
@ -105,10 +103,12 @@ public:
|
|||
try {
|
||||
if (!in->proofs_enabled())
|
||||
m_simp->reduce();
|
||||
if (m.inc())
|
||||
advance_qhead();
|
||||
}
|
||||
catch (rewriter_exception& ex) {
|
||||
throw tactic_exception(ex.msg());
|
||||
}
|
||||
}
|
||||
m_goal->elim_true();
|
||||
m_goal->elim_redundancies();
|
||||
m_goal->inc_depth();
|
||||
|
|
|
@ -47,6 +47,7 @@ Notes:
|
|||
#include "solver/parallel_params.hpp"
|
||||
#include "params/tactic_params.hpp"
|
||||
#include "parsers/smt2/smt2parser.h"
|
||||
#include "sat/sat_params.hpp"
|
||||
|
||||
|
||||
|
||||
|
@ -114,6 +115,15 @@ static solver* mk_special_solver_for_logic(ast_manager & m, params_ref const & p
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
solver* mk_smt2_solver(ast_manager& m, params_ref const& p, symbol const& logic) {
|
||||
sat_params sp(p);
|
||||
if (sp.smt())
|
||||
return mk_sat_smt_solver(m, p);
|
||||
if (sp.euf())
|
||||
return mk_inc_sat_solver(m, p);
|
||||
return mk_smt_solver(m, p, logic);
|
||||
}
|
||||
|
||||
static solver* mk_solver_for_logic(ast_manager & m, params_ref const & p, symbol const& logic) {
|
||||
bv_rewriter rw(m);
|
||||
solver* s = mk_special_solver_for_logic(m, p, logic);
|
||||
|
@ -123,7 +133,7 @@ static solver* mk_solver_for_logic(ast_manager & m, params_ref const & p, symbol
|
|||
if (!s && tp.default_tactic() == "sat")
|
||||
s = mk_inc_sat_solver(m, p);
|
||||
if (!s)
|
||||
s = mk_smt_solver(m, p, logic);
|
||||
s = mk_smt2_solver(m, p, logic);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
@ -170,6 +180,4 @@ solver_factory * mk_smt_strategic_solver_factory(symbol const & logic) {
|
|||
return alloc(smt_strategic_solver_factory, logic);
|
||||
}
|
||||
|
||||
solver* mk_smt2_solver(ast_manager& m, params_ref const& p) {
|
||||
return mk_inc_sat_solver(m, p);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue