3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-22 16:45:31 +00:00

adding nra solver

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-05-24 14:56:59 -07:00
parent 80bb084611
commit 7a809fe4f0
3 changed files with 32 additions and 0 deletions

View file

@ -415,6 +415,31 @@ namespace smt {
}
}
void internalize_mul(app* t) {
SASSERT(a.is_mul(t));
mk_enode(t);
theory_var v = mk_var(t);
svector<lean::var_index> vars;
ptr_vector<expr> todo;
todo.push_back(t);
while (!todo.empty()) {
expr* n = todo.back();
todo.pop_back();
expr* n1, *n2;
if (a.is_mul(n, n1, n2)) {
todo.push_back(n1);
todo.push_back(n2);
}
else {
if (!ctx().e_internalized(n)) {
ctx().internalize(n, false);
}
vars.push_back(get_var_index(mk_var(n)));
}
}
// m_solver->add_monomial(get_var_index(v), vars);
}
enode * mk_enode(app * n) {
if (ctx().e_internalized(n)) {
return get_enode(n);

View file

@ -1092,6 +1092,11 @@ final_check_status lar_solver::check_nra(nra_model_t& model, explanation_t& expl
return m_nra->check(model, explanation);
}
void lar_solver::add_monomial(var_index v, svector<var_index> const& vars) {
m_nra->add_monomial(v, vars.size(), vars.c_ptr());
}
void lar_solver::get_infeasibility_explanation_for_inf_sign(
vector<std::pair<mpq, constraint_index>> & explanation,
const vector<std::pair<mpq, unsigned>> & inf_row,

View file

@ -205,6 +205,8 @@ public:
lp_status find_feasible_solution();
final_check_status check_nra(nra_model_t& model, explanation_t& explanation);
void add_monomial(var_index v, svector<var_index> const& vars);
lp_status solve();