mirror of
https://github.com/Z3Prover/z3
synced 2025-04-28 11:25:51 +00:00
remove warnings in scaler and use m_cut_solver_cycle_on_var
Signed-off-by: Lev Nachmanson <levnach@hotmail.com> detect slow propagations Signed-off-by: Lev Nachmanson <levnach@hotmail.com> fiddle with the stop conditions Signed-off-by: Lev Nachmanson <levnach@hotmail.com> get rid of constraint->m_predecessors, fix a bug in push/pop with lemmas Signed-off-by: Lev Nachmanson <levnach@hotmail.com> clean detection of stale lemmas in pop Signed-off-by: Lev Nachmanson <levnach@hotmail.com> add constraints lazily to cut_solver Signed-off-by: Lev Nachmanson <levnach@hotmail.com> refactor some of cut_solver classes into include files Signed-off-by: Lev Nachmanson <levnach@hotmail.com> prepare to index constraint from 0 to to n - 1, where n is the number of constraints Signed-off-by: Lev Nachmanson <levnach@hotmail.com> prepare for constraint priority Signed-off-by: Lev Nachmanson <levnach@hotmail.com> use priorities in active_set Signed-off-by: Lev Nachmanson <levnach@hotmail.com> remove unnecesessary parameters Signed-off-by: Lev Nachmanson <levnach@hotmail.com> speedup bound propagations Signed-off-by: Lev Nachmanson <levnach@hotmail.com> restore tactics Signed-off-by: Lev Nachmanson <levnach@hotmail.com> speedup bound propagation by avoiding some calls to propagate_constraint_only_one_unlim Signed-off-by: Lev Nachmanson <levnach@hotmail.com> fixes by Nikolaj Signed-off-by: Lev Nachmanson <levnach@hotmail.com> fix print lp_core_solver Signed-off-by: Lev Nachmanson <levnach@hotmail.com> work on gomory test, subs terms indices correctly Signed-off-by: Lev Nachmanson <levnach@hotmail.com> correct const_iterator for lar_term Signed-off-by: Lev Nachmanson <levnach@hotmail.com> improve static_matrix with iterators Signed-off-by: Lev Nachmanson <levnach@hotmail.com> make row_strip a struct Signed-off-by: Lev Nachmanson <levnach@hotmail.com> move row_strip outside of static_matrix Signed-off-by: Lev Nachmanson <levnach@hotmail.com> add const_iterator to row_strip Signed-off-by: Lev Nachmanson <levnach@hotmail.com> remove the hierarchy of iterators - use std::iterators Signed-off-by: Lev Nachmanson <levnach@hotmail.com> adding gcd_test stats and taking care of for iterators Signed-off-by: Lev Nachmanson <levnach@hotmail.com> restore qflia_tactic.cpp Signed-off-by: Lev Nachmanson <levnach@hotmail.com> run gcd_test according to settings() Signed-off-by: Lev Nachmanson <levnach@hotmail.com> experiment with picking a narrow or random branch Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
6202b2f2e4
commit
2bb94ed4fe
55 changed files with 1715 additions and 1347 deletions
99
src/util/lp/constraint.h
Normal file
99
src/util/lp/constraint.h
Normal file
|
@ -0,0 +1,99 @@
|
|||
/*++
|
||||
Copyright (c) 2017 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
<name>
|
||||
|
||||
Abstract:
|
||||
|
||||
<abstract>
|
||||
|
||||
Author:
|
||||
Nikolaj Bjorner (nbjorner)
|
||||
Lev Nachmanson (levnach)
|
||||
|
||||
Revision History:
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#pragma once
|
||||
namespace lp {
|
||||
class constraint; // forward definition
|
||||
struct constraint_hash {
|
||||
size_t operator() (const constraint* c) const;
|
||||
};
|
||||
|
||||
struct constraint_equal {
|
||||
bool operator() (const constraint * a, const constraint * b) const;
|
||||
};
|
||||
|
||||
class constraint { // we only have less or equal for the inequality sign, which is enough for integral variables
|
||||
int m_id;
|
||||
bool m_is_ineq;
|
||||
polynomial m_poly;
|
||||
mpq m_d; // the divider for the case of a divisibility constraint
|
||||
std::unordered_set<constraint_index> m_assert_origins; // these indices come from the client and get collected during tightening
|
||||
public :
|
||||
unsigned id() const { return m_id; }
|
||||
const polynomial & poly() const { return m_poly; }
|
||||
polynomial & poly() { return m_poly; }
|
||||
std::unordered_set<constraint_index> & assert_origins() { return m_assert_origins;}
|
||||
const std::unordered_set<constraint_index> & assert_origins() const { return m_assert_origins;}
|
||||
bool is_lemma() const { return !is_assert(); }
|
||||
bool is_assert() const { return m_assert_origins.size() == 1; }
|
||||
bool is_ineq() const { return m_is_ineq; }
|
||||
const mpq & divider() const { return m_d; }
|
||||
public:
|
||||
constraint(
|
||||
unsigned id,
|
||||
constraint_index assert_origin,
|
||||
const polynomial & p,
|
||||
bool is_ineq):
|
||||
m_id(id),
|
||||
m_is_ineq(is_ineq),
|
||||
m_poly(p)
|
||||
{ // creates an assert
|
||||
m_assert_origins.insert(assert_origin);
|
||||
}
|
||||
constraint(
|
||||
unsigned id,
|
||||
const std::unordered_set<constraint_index>& origins,
|
||||
const polynomial & p,
|
||||
bool is_ineq):
|
||||
m_id(id),
|
||||
m_is_ineq(is_ineq),
|
||||
m_poly(p),
|
||||
m_assert_origins(origins)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
constraint(
|
||||
unsigned id,
|
||||
const polynomial & p,
|
||||
bool is_ineq):
|
||||
m_id(id),
|
||||
m_is_ineq(is_ineq),
|
||||
m_poly(p) { // creates a lemma
|
||||
}
|
||||
|
||||
public:
|
||||
constraint() {}
|
||||
|
||||
const mpq & coeff(var_index j) const {
|
||||
return m_poly.coeff(j);
|
||||
}
|
||||
const vector<monomial>& coeffs() const { return m_poly.m_coeffs;}
|
||||
|
||||
bool is_tight(unsigned j) const {
|
||||
const mpq & a = m_poly.coeff(j);
|
||||
return a == 1 || a == -1;
|
||||
}
|
||||
void add_predecessor(const constraint* p) {
|
||||
lp_assert(p != nullptr);
|
||||
for (auto m : p->assert_origins())
|
||||
m_assert_origins.insert(m); }
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue