mirror of
https://github.com/Z3Prover/z3
synced 2025-04-30 04:15:51 +00:00
Polysat: conflict resolution updates (#5534)
* variable elimination / saturation sketch * conflict resolution updates
This commit is contained in:
parent
dc547510db
commit
9f387f5738
14 changed files with 343 additions and 294 deletions
|
@ -16,37 +16,21 @@ Author:
|
|||
|
||||
namespace polysat {
|
||||
|
||||
class solver;
|
||||
|
||||
class variable_elimination_engine {
|
||||
public:
|
||||
virtual ~variable_elimination_engine() {}
|
||||
virtual bool perform(pvar v, conflict_core& core) = 0;
|
||||
virtual bool perform(solver& s, pvar v, conflict_core& core) = 0;
|
||||
};
|
||||
|
||||
// discovers when a variable has already been removed... (special case of ve_reduction?)
|
||||
class ve_trivial final : public variable_elimination_engine {
|
||||
class ve_reduction : public variable_elimination_engine {
|
||||
public:
|
||||
bool perform(pvar v, conflict_core& core) override { NOT_IMPLEMENTED_YET(); return false; }
|
||||
bool perform(solver& s, pvar v, conflict_core& core) override;
|
||||
};
|
||||
|
||||
// ve by core reduction: try core reduction on all constraints that contain the variable to be eliminated.
|
||||
// if we cannot eliminate all such constraints, then should we keep all of them instead of eliminating only some? since they might still be useful for saturation.
|
||||
class ve_reduction final : public variable_elimination_engine {
|
||||
class ve_forbidden_intervals : public variable_elimination_engine {
|
||||
public:
|
||||
bool perform(pvar v, conflict_core& core) override { NOT_IMPLEMENTED_YET(); return false; }
|
||||
};
|
||||
|
||||
class ve_forbidden_intervals final : public variable_elimination_engine {
|
||||
public:
|
||||
bool perform(pvar v, conflict_core& core) override { NOT_IMPLEMENTED_YET(); return false; }
|
||||
};
|
||||
|
||||
class variable_elimination final {
|
||||
scoped_ptr_vector<variable_elimination_engine> ve_engines;
|
||||
|
||||
public:
|
||||
variable_elimination() {}
|
||||
|
||||
/// Try to eliminate the variable v from the given core
|
||||
bool perform(pvar v, conflict_core& core) { NOT_IMPLEMENTED_YET(); return false; }
|
||||
bool perform(solver& s, pvar v, conflict_core& core) override;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue