3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 19:35:50 +00:00
z3/src/math/lp/int_solver.h
Lev Nachmanson 008e9229a5 use std_vector more and getting NOT_IMPLEMENTING in C:\dev\z3\src\math\lp\dioph_eq.cpp
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-02-11 12:23:00 -10:00

102 lines
3 KiB
C++

/*++
Copyright (c) 2017 Microsoft Corporation
Module Name:
<name>
Abstract:
<abstract>
Author:
Nikolaj Bjorner (nbjorner)
Lev Nachmanson (levnach)
Revision History:
--*/
#pragma once
#include "math/lp/lp_settings.h"
#include "math/lp/static_matrix.h"
#include "util/uint_set.h"
#include "math/lp/lar_term.h"
#include "math/lp/lar_constraints.h"
#include "math/lp/hnf_cutter.h"
#include "math/lp/int_gcd_test.h"
#include "math/lp/lia_move.h"
#include "math/lp/explanation.h"
namespace lp {
class lar_solver;
class lar_core_solver;
class int_solver {
friend struct create_cut;
friend class gomory;
friend class int_cube;
friend class int_branch;
friend class int_gcd_test;
friend class hnf_cutter;
friend class imp;
friend class dioph_eq;
class imp;
lar_solver& lra;
lar_core_solver& lrac;
imp* m_imp;
vector<equality> m_equalities;
bool get_freedom_interval_for_column(unsigned j, bool & inf_l, impq & l, bool & inf_u, impq & u, mpq & m);
bool is_boxed(unsigned j) const;
bool is_free(unsigned j) const;
bool value_is_int(unsigned j) const;
bool is_feasible() const;
bool column_is_int_inf(unsigned j) const;
std::ostream& display_inf_rows(std::ostream&) const;
lp_settings& settings();
const lp_settings& settings() const;
bool at_bound(unsigned j) const;
bool has_lower(unsigned j) const;
bool has_upper(unsigned j) const;
unsigned row_of_basic_column(unsigned j) const;
public:
int_solver(lar_solver& lp);
~int_solver();
// the function that doing the main job
lia_move check(explanation *);
lar_term const& get_term() const;
lar_term & get_term();
mpq const& offset() const;
mpq & offset();
bool is_upper() const;
bool& is_upper();
bool is_base(unsigned j) const;
bool is_real(unsigned j) const;
const impq & lower_bound(unsigned j) const;
const impq & upper_bound(unsigned j) const;
bool column_is_int(lpvar j) const;
const impq & get_value(unsigned j) const;
bool at_lower(unsigned j) const;
bool at_upper(unsigned j) const;
void simplify(std::function<bool(unsigned)>& is_root);
vector<equality> const& equalities() const { return m_equalities; }
bool is_fixed(unsigned j) const;
std::ostream& display_column(std::ostream & out, unsigned j) const;
u_dependency* column_upper_bound_constraint(unsigned j) const;
u_dependency* column_lower_bound_constraint(unsigned j) const;
bool current_solution_is_inf_on_cut() const;
bool shift_var(unsigned j, unsigned range);
std::ostream& display_row_info(std::ostream & out, unsigned row_index) const;
std::ostream & display_row(std::ostream & out, std_vector<row_cell<rational>> const & row) const;
bool is_term(unsigned j) const;
unsigned column_count() const;
int select_int_infeasible_var();
void set_expl(lp::explanation * ex);
explanation * expl();
#if Z3DEBUG
lia_move dio_test();
#endif
};
}