3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-20 23:56:37 +00:00
* initial skeletons for nra solver

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>

* initial skeletons for nra solver

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-05-23 18:07:58 -07:00 committed by Lev Nachmanson
parent 1f425824ff
commit 8ecd8a2a52
3 changed files with 116 additions and 1 deletions

View file

@ -19,8 +19,9 @@ z3_add_component(lp
lp_solver_instances.cpp
lu_instances.cpp
matrix_instances.cpp
nra_solver.cpp
permutation_matrix_instances.cpp
quick_xplain.cpp
quick_xplain.cpp
row_eta_matrix_instances.cpp
scaler_instances.cpp
sparse_matrix_instances.cpp

View file

@ -0,0 +1,67 @@
/*
Copyright (c) 2017 Microsoft Corporation
Author: Lev Nachmanson
*/
#pragma once
#include "util/lp/nra_solver.h"
namespace lp {
struct nra_solver::imp {
lean::lar_solver& s;
svector<lean::var_index> m_vars;
vector<svector<lean::var_index>> m_monomials;
unsigned_vector m_lim;
imp(lean::lar_solver& s): s(s) {
m_lim.push_back(0);
}
lean::final_check_status check_feasible() {
return lean::final_check_status::GIVEUP;
}
void add(lean::var_index v, unsigned sz, lean::var_index const* vs) {
m_vars.push_back(v);
m_monomials.push_back(svector<lean::var_index>(sz, vs));
}
void push() {
m_lim.push_back(m_vars.size());
}
void pop(unsigned n) {
SASSERT(n < m_lim.size());
m_lim.shrink(m_lim.size() - n);
m_vars.shrink(m_lim.back());
m_monomials.shrink(m_lim.back());
}
};
nra_solver::nra_solver(lean::lar_solver& s) {
m_imp = alloc(imp, s);
}
nra_solver::~nra_solver() {
dealloc(m_imp);
}
void nra_solver::add_monomial(lean::var_index v, unsigned sz, lean::var_index const* vs) {
m_imp->add(v, sz, vs);
}
lean::final_check_status nra_solver::check_feasible() {
return m_imp->check_feasible();
}
void nra_solver::push() {
m_imp->push();
}
void nra_solver::pop(unsigned n) {
m_imp->pop(n);
}
}

47
src/util/lp/nra_solver.h Normal file
View file

@ -0,0 +1,47 @@
/*
Copyright (c) 2017 Microsoft Corporation
Author: Lev Nachmanson
*/
#pragma once
#include "util/vector.h"
#include "util/lp/lp_settings.h"
#include "util/lp/lar_solver.h"
namespace lean {
class lar_solver;
}
namespace lp {
class nra_solver {
struct imp;
imp* m_imp;
public:
nra_solver(lean::lar_solver& s);
~nra_solver();
/*
\brief Add a definition v = vs[0]*vs[1]*...*vs[sz-1]
The variable v is equal to the product of variables vs.
*/
void add_monomial(lean::var_index v, unsigned sz, lean::var_index const* vs);
/*
\brief Check feasiblity of linear constraints augmented by polynomial definitions
that are added.
*/
lean::final_check_status check_feasible();
/*
\brief push and pop scope.
Monomial definitions are retraced when popping scope.
*/
void push();
void pop(unsigned n);
};
}