mirror of
https://github.com/Z3Prover/z3
synced 2025-08-18 17:22:15 +00:00
* 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>
65 lines
2 KiB
C++
65 lines
2 KiB
C++
/*++
|
|
Copyright (c) 2017 Microsoft Corporation
|
|
|
|
Author:
|
|
Nikolaj Bjorner (nbjorner)
|
|
Lev Nachmanson (levnach)
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "math/lp/nla_common.h"
|
|
#include "math/lp/nla_intervals.h"
|
|
#include "math/lp/nex.h"
|
|
#include "math/lp/cross_nested.h"
|
|
#include "util/uint_set.h"
|
|
#include "math/grobner/pdd_solver.h"
|
|
|
|
namespace nla {
|
|
class core;
|
|
|
|
class grobner : common {
|
|
dd::pdd_manager m_pdd_manager;
|
|
dd::solver m_solver;
|
|
lp::lar_solver& lra;
|
|
indexed_uint_set m_rows;
|
|
unsigned m_quota = 0;
|
|
|
|
lp::lp_settings& lp_settings();
|
|
|
|
// solving
|
|
bool is_conflicting();
|
|
bool is_conflicting(const dd::solver::equation& eq);
|
|
|
|
bool propagate_bounds();
|
|
bool propagate_bounds(const dd::solver::equation& eq);
|
|
|
|
bool propagate_eqs();
|
|
bool propagate_fixed(const dd::solver::equation& eq);
|
|
|
|
bool propagate_factorization();
|
|
bool propagate_factorization(const dd::solver::equation& eq);
|
|
|
|
void add_dependencies(new_lemma& lemma, const dd::solver::equation& eq);
|
|
|
|
// setup
|
|
void configure();
|
|
void set_level2var();
|
|
void find_nl_cluster();
|
|
void prepare_rows_and_active_vars();
|
|
void add_var_and_its_factors_to_q_and_collect_new_rows(lpvar j, svector<lpvar>& q);
|
|
void add_row(const vector<lp::row_cell<rational>>& row);
|
|
void add_fixed_monic(unsigned j);
|
|
bool is_solved(dd::pdd const& p, unsigned& v, dd::pdd& r);
|
|
void add_eq(dd::pdd& p, u_dependency* dep);
|
|
const rational& val_of_fixed_var_with_deps(lpvar j, u_dependency*& dep);
|
|
dd::pdd pdd_expr(const rational& c, lpvar j, u_dependency*& dep);
|
|
|
|
void display_matrix_of_m_rows(std::ostream& out) const;
|
|
std::ostream& diagnose_pdd_miss(std::ostream& out);
|
|
|
|
public:
|
|
grobner(core *core);
|
|
void operator()();
|
|
};
|
|
}
|