mirror of
https://github.com/Z3Prover/z3
synced 2025-08-26 13:06:05 +00:00
t
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
7ffebbd60c
commit
52759c815e
1 changed files with 17 additions and 13 deletions
|
@ -53,9 +53,7 @@ namespace nlsat {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Z3DEBUG
|
#ifdef Z3DEBUG
|
||||||
|
|
||||||
bool check_prop_init() {
|
bool check_prop_init() {
|
||||||
std::cout << "checked\n";
|
|
||||||
for (unsigned k = 0; k < prop_count(); ++k)
|
for (unsigned k = 0; k < prop_count(); ++k)
|
||||||
if (m_prop_dom[k][k])
|
if (m_prop_dom[k][k])
|
||||||
return false;
|
return false;
|
||||||
|
@ -124,7 +122,10 @@ namespace nlsat {
|
||||||
bool status;
|
bool status;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool dominates(prop_enum a, prop_enum b) {
|
bool dominates(const property& a, const property& b) const {
|
||||||
|
return a.p == b.p && dominates(a.prop, b.prop);
|
||||||
|
}
|
||||||
|
bool dominates(prop_enum a, prop_enum b) const {
|
||||||
return m_prop_dom[static_cast<unsigned>(a)][static_cast<unsigned>(b)];
|
return m_prop_dom[static_cast<unsigned>(a)][static_cast<unsigned>(b)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,11 +140,11 @@ namespace nlsat {
|
||||||
if (cand.empty()) return {};
|
if (cand.empty()) return {};
|
||||||
|
|
||||||
// Determine maxima w.r.t. ▹ using the transitive closure matrix
|
// Determine maxima w.r.t. ▹ using the transitive closure matrix
|
||||||
|
// Dominance requires the same polynomial in both compared properties
|
||||||
std::vector<bool> dominated(cand.size(), false);
|
std::vector<bool> dominated(cand.size(), false);
|
||||||
for (size_t i = 0; i < cand.size(); ++i) {
|
for (size_t i = 0; i < cand.size(); ++i) {
|
||||||
for (size_t j = 0; j < cand.size(); ++j) {
|
for (size_t j = 0; j < cand.size(); ++j) {
|
||||||
if (i != j && dominates(cand[j].prop, cand[i].prop)) {
|
if (i != j && dominates(cand[j], cand[i])) {
|
||||||
dominated[i] = true;
|
dominated[i] = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -171,19 +172,22 @@ namespace nlsat {
|
||||||
|
|
||||||
result_struct construct_interval() {
|
result_struct construct_interval() {
|
||||||
result_struct ret;
|
result_struct ret;
|
||||||
/*foreach q ∈ Q |i where q is the greatest element with respect to ▹ (from Definition 4.5) and q ̸= sgn_inv(p) for an irreducible p
|
/*foreach q ∈ Q |i where q is the greatest element with respect to the relation (from Definition 4.5) and q ̸= sgn_inv(p) for an irreducible p
|
||||||
do
|
do
|
||||||
2 Q := apply_pre(i, Q ,q,(s)) // Algorithm 3
|
2 Q := apply_pre(i, Q ,q,(s)) // Algorithm 3
|
||||||
3 if Q= FAIL then
|
3 if Q= FAIL then
|
||||||
4 return FAIL
|
4 return FAIL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
std::vector<property> to_refine = greatest_to_refine();
|
std::vector<property> to_refine = greatest_to_refine();
|
||||||
|
|
||||||
// refine using to_refine (TBD)
|
// refine using to_refine (TBD)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
// return an empty vector on failure
|
// return an empty vector on failure
|
||||||
std::vector<symbolic_interval> single_cell() {
|
std::vector<symbolic_interval> single_cell() {
|
||||||
std::vector<symbolic_interval> ret;
|
std::vector<symbolic_interval> ret;
|
||||||
|
|
||||||
m_Q = seed_properties(); // Q is the set of properties on level m_n
|
m_Q = seed_properties(); // Q is the set of properties on level m_n
|
||||||
for (unsigned i = m_n; i >= 1; i--) {
|
for (unsigned i = m_n; i >= 1; i--) {
|
||||||
auto result = construct_interval();
|
auto result = construct_interval();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue