mirror of
https://github.com/Z3Prover/z3
synced 2025-07-19 10:52:02 +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
|
@ -1,25 +1,19 @@
|
|||
/*++
|
||||
Copyright (c) 2017 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
<name>
|
||||
|
||||
Abstract:
|
||||
|
||||
<abstract>
|
||||
justifications for upper or lower bounds
|
||||
|
||||
Author:
|
||||
|
||||
Lev Nachmanson (levnach)
|
||||
|
||||
Revision History:
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#pragma once
|
||||
#include "util/vector.h"
|
||||
#include "util/dependency.h"
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
|
@ -48,14 +42,20 @@ inline bool compare(const std::pair<mpq, var_index> & a, const std::pair<mpq, va
|
|||
}
|
||||
|
||||
class ul_pair {
|
||||
constraint_index m_lower_bound_witness;
|
||||
constraint_index m_upper_bound_witness;
|
||||
bool m_associated_with_row;
|
||||
u_dependency* m_lower_bound_witness = nullptr;
|
||||
u_dependency* m_upper_bound_witness = nullptr;
|
||||
bool m_associated_with_row = false;
|
||||
public:
|
||||
constraint_index& lower_bound_witness() {return m_lower_bound_witness;}
|
||||
constraint_index lower_bound_witness() const {return m_lower_bound_witness;}
|
||||
constraint_index& upper_bound_witness() { return m_upper_bound_witness;}
|
||||
constraint_index upper_bound_witness() const {return m_upper_bound_witness;}
|
||||
// TODO - seems more straight-forward to just expose ul_pair as a struct with direct access to attributes.
|
||||
|
||||
u_dependency*& lower_bound_witness() { return m_lower_bound_witness; }
|
||||
u_dependency* lower_bound_witness() const { return m_lower_bound_witness; }
|
||||
u_dependency*& upper_bound_witness() { return m_upper_bound_witness; }
|
||||
u_dependency* upper_bound_witness() const { return m_upper_bound_witness; }
|
||||
|
||||
// equality is used by stackedvector operations.
|
||||
// this appears to be a low level reason
|
||||
|
||||
bool operator!=(const ul_pair & p) const {
|
||||
return !(*this == p);
|
||||
}
|
||||
|
@ -66,14 +66,9 @@ public:
|
|||
m_associated_with_row == p.m_associated_with_row;
|
||||
}
|
||||
// empty constructor
|
||||
ul_pair() :
|
||||
m_lower_bound_witness(UINT_MAX),
|
||||
m_upper_bound_witness(UINT_MAX),
|
||||
m_associated_with_row(false) {}
|
||||
ul_pair() {}
|
||||
|
||||
ul_pair(bool associated_with_row) :
|
||||
m_lower_bound_witness(UINT_MAX),
|
||||
m_upper_bound_witness(UINT_MAX),
|
||||
m_associated_with_row(associated_with_row) {}
|
||||
|
||||
bool associated_with_row() const { return m_associated_with_row; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue