mirror of
https://github.com/Z3Prover/z3
synced 2025-06-21 13:23:39 +00:00
adding nra solver
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
80bb084611
commit
7a809fe4f0
3 changed files with 32 additions and 0 deletions
|
@ -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) {
|
enode * mk_enode(app * n) {
|
||||||
if (ctx().e_internalized(n)) {
|
if (ctx().e_internalized(n)) {
|
||||||
return get_enode(n);
|
return get_enode(n);
|
||||||
|
|
|
@ -1092,6 +1092,11 @@ final_check_status lar_solver::check_nra(nra_model_t& model, explanation_t& expl
|
||||||
return m_nra->check(model, explanation);
|
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(
|
void lar_solver::get_infeasibility_explanation_for_inf_sign(
|
||||||
vector<std::pair<mpq, constraint_index>> & explanation,
|
vector<std::pair<mpq, constraint_index>> & explanation,
|
||||||
const vector<std::pair<mpq, unsigned>> & inf_row,
|
const vector<std::pair<mpq, unsigned>> & inf_row,
|
||||||
|
|
|
@ -205,6 +205,8 @@ public:
|
||||||
lp_status find_feasible_solution();
|
lp_status find_feasible_solution();
|
||||||
|
|
||||||
final_check_status check_nra(nra_model_t& model, explanation_t& explanation);
|
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();
|
lp_status solve();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue