mirror of
https://github.com/Z3Prover/z3
synced 2025-06-29 09:28:45 +00:00
niil_solver basic case progress
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
1fce8ee0b1
commit
3fb361c886
1 changed files with 10 additions and 6 deletions
|
@ -596,7 +596,7 @@ struct solver::imp {
|
||||||
if (m_minimal_monomials.empty() && m.size() > 2)
|
if (m_minimal_monomials.empty() && m.size() > 2)
|
||||||
create_min_map();
|
create_min_map();
|
||||||
|
|
||||||
return process_ones_of_mon(m, ones_of_mon);
|
return process_ones_of_mon(m, ones_of_mon, vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool generate_basic_lemma_for_mon_neutral(unsigned i_mon) {
|
bool generate_basic_lemma_for_mon_neutral(unsigned i_mon) {
|
||||||
|
@ -610,22 +610,26 @@ struct solver::imp {
|
||||||
return generate_basic_neutral_for_reduced_monomial(m, v, reduced_vars);
|
return generate_basic_neutral_for_reduced_monomial(m, v, reduced_vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// vars here are minimal vars for m.vs
|
||||||
bool process_ones_of_mon(const mon_eq& m,
|
bool process_ones_of_mon(const mon_eq& m,
|
||||||
const vector<var_index_with_constraints>& ones_of_monomial) {
|
const vector<var_index_with_constraints>& ones_of_monomial, const svector<lpvar> &min_vars) {
|
||||||
svector<unsigned> mask(ones_of_monomial.size(), (unsigned) 0);
|
svector<unsigned> mask(ones_of_monomial.size(), (unsigned) 0);
|
||||||
|
auto vars = min_vars;
|
||||||
int sign;
|
int sign;
|
||||||
svector<lpvar> min_mon = reduce_monomial_to_minimal(m.m_vs, sign);
|
// We crossing out the ones representing the mask from vars
|
||||||
// We will by crossing out the ones representing the mask from min_mon
|
|
||||||
do {
|
do {
|
||||||
for (unsigned k = 0; k < mask.size(); k++) {
|
for (unsigned k = 0; k < mask.size(); k++) {
|
||||||
if (mask[k] == 0) {
|
if (mask[k] == 0) {
|
||||||
mask[k] = 1;
|
mask[k] = 1;
|
||||||
sign *= ones_of_monomial[k].m_sign;
|
sign *= ones_of_monomial[k].m_sign;
|
||||||
min_mon.erase(ones_of_monomial[k].m_i);
|
vars.erase(ones_of_monomial[k].m_i);
|
||||||
SASSERT(false);
|
std::sort(vars.begin(), vars.end());
|
||||||
|
SASSERT(false); // start here!!!!!!!!!!!!!!!!111111
|
||||||
} else {
|
} else {
|
||||||
SASSERT(mask[k] == 1);
|
SASSERT(mask[k] == 1);
|
||||||
sign *= ones_of_monomial[k].m_sign;
|
sign *= ones_of_monomial[k].m_sign;
|
||||||
|
mask[k] = 0;
|
||||||
|
vars.push_back(min_vars[ones_of_monomial[k].m_i]); // vars becomes unsorted
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while(true);
|
} while(true);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue