3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 01:25:31 +00:00

more stub

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-03-31 13:27:34 -07:00
parent 8730f0aef7
commit 2e4b1fb5e0
2 changed files with 19 additions and 12 deletions

View file

@ -102,10 +102,6 @@ namespace polysat {
}
void solver::add_eq(pdd const& p, unsigned dep) {
//
// TODO reduce p using assignment (at current level,
// assuming constraint is removed also at current level).
//
constraint* c = constraint::eq(m_level, p, m_dep_manager.mk_leaf(dep));
m_constraints.push_back(c);
add_watch(*c);
@ -370,8 +366,7 @@ namespace polysat {
v = m_search[i];
if (!is_marked(v))
continue;
pdd q = isolate(v);
pdd r = resolve(v, q, p);
pdd r = resolve(v, p);
pdd rval = r.subst_val(sub);
if (!rval.is_non_zero())
goto backtrack;
@ -426,8 +421,9 @@ namespace polysat {
pdd solver::isolate(unsigned v) {
if (m_cjust[v].empty())
return sz2pdd(m_size[v]).zero();
pdd p = m_cjust[v][0]->p();
for (unsigned i = m_cjust[v].size(); i-- > 1; ) {
auto const& cs = m_cjust[v];
pdd p = cs[0]->p();
for (unsigned i = cs.size(); i-- > 1; ) {
// TBD reduce with respect to v
}
return p;
@ -436,9 +432,20 @@ namespace polysat {
/**
* Return residue of superposing p and q with respect to v.
*/
pdd solver::resolve(unsigned v, pdd const& p, pdd const& q) {
// TBD remove as much trace of v as possible.
return p;
pdd solver::resolve(unsigned v, pdd const& p) {
auto degree = p.degree(v);
auto const& cs = m_cjust[v];
pdd r = p;
while (degree > 0) {
for (auto * c : cs) {
if (degree >= c->p().degree(v)) {
// TODO binary resolve, update r using result
// add parity condition to presere falsification
degree = r.degree(v);
}
}
}
return r;
}
void solver::reset_marks() {

View file

@ -167,7 +167,7 @@ namespace polysat {
void set_mark(unsigned v) { m_marks[v] = m_clock; }
pdd isolate(unsigned v);
pdd resolve(unsigned v, pdd const& p, pdd const& q);
pdd resolve(unsigned v, pdd const& p);
void decide();
void resolve_conflict_core();