17 using Row = std::vector<RowEntry>;
21 auto it_a = a.begin(), it_b = b.begin();
22 auto end_a = a.end(), end_b = b.end();
23 while (it_a != end_a && it_b != end_b) {
24 if (it_a->col_index != it_b->col_index)
25 return it_a->col_index < it_b->col_index;
26 if (it_a->value != it_b->value)
27 return it_a->value < it_b->value;
31 return (it_b != end_b);
66 std::vector<Matrix::ColIndex> cols_to_elim;
67 for (
ColIndex j = 0; j < n_quantified; ++j) cols_to_elim.push_back(j);
68 m_nodes.emplace_back(filtered, cols_to_elim);
103 result.append_row(r.begin(), r.end());
116 assert(!row.empty());
121 assert(!row.empty());
123 const auto& e = row.front();
124 return (e.col_index <=
delta_column()) && (e.value > 0);
130 for (
auto it = row.rbegin(); it->col_index >
delta_column(); ++it) {
131 if (it->value < 0)
return false;
142 for (std::size_t i = 0; ; ++i) {
160 result.append_row(unsat_row.begin(), unsat_row.end());
ColIndex m_first_parameter_col
std::set< Row, cmp_row > m_found_rows
bool is_trivial(const Row &row) const
ColIndex delta_column() const
std::vector< Node > m_nodes
bool is_positive_combination(const Row &row) const
ColIndex constant_column() const
std::vector< Node > split_into_independent_nodes(const Node &n) const
Matrix::ColIndex ColIndex
bool fm_elimination(Node &parent)
void collect_constraint(const Row &row)
bool is_global_conflict(const Row &row) const
bool is_conflict(const Row &row) const
std::vector< RowEntry > Row
Matrix trivial_unsat_matrix() const
ColIndex origin_column(RowIndex row) const
Node bounded_elimination(Node &parent)
Matrix::RowIndex RowIndex
FMplexElimination(const Matrix &m, std::size_t n_quantified, std::size_t n_parameters)
Matrix::RowEntry RowEntry
Node unbounded_elimination(Node &parent)
std::size_t n_cols() const
row_view row_entries(const RowIndex ri) const
row_iterator row_end(RowIndex r) const
row_iterator row_begin(RowIndex r) const
RowIndex append_row(const It &begin, const It &end)
Appends the row contained in the range between begin and end to the matrix.
std::size_t n_rows() const
bool operator()(const Row &a, const Row &b) const