mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 11:07:51 +00:00
Arith min max (#6864)
* prepare for dependencies Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * snapshot Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more refactoring Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more refactoring Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * build Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * pass in u_dependency_manager Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * address NYIs Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more refactoring names Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * eq_explanation update Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add outline of bounds improvement functionality Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix unit tests Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove unused structs Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more bounds Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more bounds Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * convert more internals to use u_dependency instead of constraint_index Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * convert more internals to use u_dependency instead of constraint_index Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remember to push/pop scopes Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * use the main function for updating bounds Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove reset of shared dep manager Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * disable improve-bounds, add statistics Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> --------- Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
c3b344ec47
commit
5e3df9ee77
40 changed files with 630 additions and 529 deletions
|
@ -28,22 +28,24 @@
|
|||
namespace nla {
|
||||
|
||||
class eq_justification {
|
||||
lpci m_cs[4];
|
||||
u_dependency* m_cs[4];
|
||||
public:
|
||||
eq_justification(std::initializer_list<lpci> cs) {
|
||||
eq_justification(std::initializer_list<u_dependency*> cs) {
|
||||
int i = 0;
|
||||
for (lpci c: cs) {
|
||||
for (auto c: cs) {
|
||||
m_cs[i++] = c;
|
||||
}
|
||||
for (; i < 4; i++) {
|
||||
m_cs[i] = -1;
|
||||
m_cs[i] = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void explain(lp::explanation& e) const {
|
||||
for (lpci c : m_cs)
|
||||
if (c + 1 != 0) // c != -1
|
||||
e.push_back(c);
|
||||
u_dependency* const* begin() const { return m_cs; }
|
||||
u_dependency* const* end() const {
|
||||
unsigned i = 0;
|
||||
for (; i < 4 && m_cs[i]; ++i)
|
||||
;
|
||||
return m_cs + i;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -202,7 +204,7 @@ public:
|
|||
}
|
||||
|
||||
for (eq_justification const& j : m_justtrail) {
|
||||
j.explain(e);
|
||||
explain_eq(j, e);
|
||||
}
|
||||
m_stats.m_num_explains += m_justtrail.size();
|
||||
m_stats.m_num_explain_calls++;
|
||||
|
@ -216,6 +218,17 @@ public:
|
|||
// IF_VERBOSE(2, verbose_stream() << (double)m_stats.m_num_explains / m_stats.m_num_explain_calls << "\n");
|
||||
}
|
||||
|
||||
void explain_eq(eq_justification const& eq, lp::explanation& e) const {
|
||||
u_dependency_manager dm;
|
||||
unsigned_vector deps;
|
||||
for (auto* dep : eq) {
|
||||
deps.reset();
|
||||
dm.linearize(dep, deps);
|
||||
for (auto ci : deps)
|
||||
e.push_back(ci);
|
||||
}
|
||||
}
|
||||
|
||||
void explain_bfs(signed_var v1, signed_var v2, lp::explanation& e) const {
|
||||
SASSERT(find(v1) == find(v2));
|
||||
if (v1 == v2) {
|
||||
|
@ -249,7 +262,7 @@ public:
|
|||
}
|
||||
|
||||
while (head != 0) {
|
||||
m_justtrail[head].explain(e);
|
||||
explain_eq(m_justtrail[head], e);
|
||||
head = m_todo[head].m_index;
|
||||
++m_stats.m_num_explains;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue