mirror of
https://github.com/Z3Prover/z3
synced 2025-06-18 11:58:31 +00:00
update types and docs
This commit is contained in:
parent
c54c564019
commit
9f05f645c1
2 changed files with 26 additions and 22 deletions
|
@ -586,9 +586,9 @@ namespace polysat {
|
||||||
if constexpr (mode == query_t::find_viable)
|
if constexpr (mode == query_t::find_viable)
|
||||||
res = query_find(v, result.first, result.second);
|
res = query_find(v, result.first, result.second);
|
||||||
else if constexpr (mode == query_t::min_viable)
|
else if constexpr (mode == query_t::min_viable)
|
||||||
res = query_min(v, result) ? l_true : l_undef;
|
res = query_min(v, result);
|
||||||
else if constexpr (mode == query_t::max_viable)
|
else if constexpr (mode == query_t::max_viable)
|
||||||
res = query_max(v, result) ? l_true : l_undef;
|
res = query_max(v, result);
|
||||||
else if constexpr (mode == query_t::has_viable) {
|
else if constexpr (mode == query_t::has_viable) {
|
||||||
NOT_IMPLEMENTED_YET();
|
NOT_IMPLEMENTED_YET();
|
||||||
}
|
}
|
||||||
|
@ -674,14 +674,14 @@ namespace polysat {
|
||||||
return l_true;
|
return l_true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool viable::query_min(pvar v, rational& lo) {
|
lbool viable::query_min(pvar v, rational& lo) {
|
||||||
// TODO: should be able to deal with UNSAT case; since also min_viable has to deal with it due to fallback solver
|
// TODO: should be able to deal with UNSAT case; since also min_viable has to deal with it due to fallback solver
|
||||||
lo = 0;
|
lo = 0;
|
||||||
entry* e = m_units[v];
|
entry* e = m_units[v];
|
||||||
if (!e && !refine_viable(v, lo))
|
if (!e && !refine_viable(v, lo))
|
||||||
return false;
|
return l_undef;
|
||||||
if (!e)
|
if (!e)
|
||||||
return true;
|
return l_true;
|
||||||
entry* first = e;
|
entry* first = e;
|
||||||
entry* last = first->prev();
|
entry* last = first->prev();
|
||||||
if (last->interval.currently_contains(lo))
|
if (last->interval.currently_contains(lo))
|
||||||
|
@ -694,19 +694,19 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
while (e != first);
|
while (e != first);
|
||||||
if (!refine_viable(v, lo))
|
if (!refine_viable(v, lo))
|
||||||
return false;
|
return l_undef;
|
||||||
SASSERT(is_viable(v, lo));
|
SASSERT(is_viable(v, lo));
|
||||||
return true;
|
return l_true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool viable::query_max(pvar v, rational& hi) {
|
lbool viable::query_max(pvar v, rational& hi) {
|
||||||
// TODO: should be able to deal with UNSAT case; since also max_viable has to deal with it due to fallback solver
|
// TODO: should be able to deal with UNSAT case; since also max_viable has to deal with it due to fallback solver
|
||||||
hi = s.var2pdd(v).max_value();
|
hi = s.var2pdd(v).max_value();
|
||||||
auto* e = m_units[v];
|
auto* e = m_units[v];
|
||||||
if (!e && !refine_viable(v, hi))
|
if (!e && !refine_viable(v, hi))
|
||||||
return false;
|
return l_undef;
|
||||||
if (!e)
|
if (!e)
|
||||||
return true;
|
return l_true;
|
||||||
entry* last = e->prev();
|
entry* last = e->prev();
|
||||||
e = last;
|
e = last;
|
||||||
do {
|
do {
|
||||||
|
@ -717,9 +717,9 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
while (e != last);
|
while (e != last);
|
||||||
if (!refine_viable(v, hi))
|
if (!refine_viable(v, hi))
|
||||||
return false;
|
return l_undef;
|
||||||
SASSERT(is_viable(v, hi));
|
SASSERT(is_viable(v, hi));
|
||||||
return true;
|
return l_true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <query_t mode>
|
template <query_t mode>
|
||||||
|
|
|
@ -105,28 +105,32 @@ namespace polysat {
|
||||||
|
|
||||||
void propagate(pvar v, rational const& val);
|
void propagate(pvar v, rational const& val);
|
||||||
|
|
||||||
// return true if done, false if refined
|
/**
|
||||||
bool query_min(pvar v, rational& out_lo);
|
* Interval-based queries
|
||||||
|
* @return l_true on success, l_false on conflict, l_undef on refinement
|
||||||
|
*/
|
||||||
|
lbool query_min(pvar v, rational& out_lo);
|
||||||
|
lbool query_max(pvar v, rational& out_hi);
|
||||||
|
lbool query_find(pvar v, rational& out_lo, rational& out_hi);
|
||||||
|
|
||||||
// return true if done, false if refined
|
/**
|
||||||
bool query_max(pvar v, rational& out_hi);
|
* Bitblasting-based queries.
|
||||||
|
* The univariate solver has already been filled with all relevant constraints and check() returned l_true.
|
||||||
// return true if done, false if resource out
|
* @return l_true on success, l_false on conflict, l_undef on resource limit
|
||||||
|
*/
|
||||||
lbool query_min_fallback(pvar v, univariate_solver& us, rational& out_lo);
|
lbool query_min_fallback(pvar v, univariate_solver& us, rational& out_lo);
|
||||||
lbool query_max_fallback(pvar v, univariate_solver& us, rational& out_hi);
|
lbool query_max_fallback(pvar v, univariate_solver& us, rational& out_hi);
|
||||||
|
|
||||||
// return resource_out if refined
|
|
||||||
lbool query_find(pvar v, rational& out_lo, rational& out_hi);
|
|
||||||
lbool query_find_fallback(pvar v, univariate_solver& us, rational& out_lo, rational& out_hi);
|
lbool query_find_fallback(pvar v, univariate_solver& us, rational& out_lo, rational& out_hi);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interval query with bounded refinement and fallback to bitblasting.
|
* Interval-based query with bounded refinement and fallback to bitblasting.
|
||||||
* @return l_true on success, l_false on conflict, l_undef on resource limit
|
* @return l_true on success, l_false on conflict, l_undef on resource limit
|
||||||
*/
|
*/
|
||||||
template <viable_query::query_t mode>
|
template <viable_query::query_t mode>
|
||||||
lbool query(pvar v, typename viable_query::query_result<mode>::result_t& out_result);
|
lbool query(pvar v, typename viable_query::query_result<mode>::result_t& out_result);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Bitblasting-based query.
|
||||||
* @return l_true on success, l_false on conflict, l_undef on resource limit
|
* @return l_true on success, l_false on conflict, l_undef on resource limit
|
||||||
*/
|
*/
|
||||||
template <viable_query::query_t mode>
|
template <viable_query::query_t mode>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue