/*++ Copyright (c) 2017 Microsoft Corporation Module Name: nla_divisions.h Author: Lev Nachmanson (levnach) Nikolaj Bjorner (nbjorner) Description: Check division constraints. --*/ #include "math/lp/nla_types.h" namespace nla { class core; class divisions { core& m_core; vector> m_idivisions; vector> m_rdivisions; vector> m_bounded_divisions; // divisibility facts (r, x, y, d) meaning r = mod(x, y) and d = div(x, y) vector> m_divisibility; public: divisions(core& c):m_core(c) {} void add_idivision(lpvar q, lpvar x, lpvar y, lpvar r); void add_rdivision(lpvar q, lpvar x, lpvar y, lpvar r); void add_bounded_division(lpvar q, lpvar x, lpvar y, lpvar r); void add_divisibility(lpvar r, lpvar x, lpvar y, lpvar d); void check(); void check_bounded_divisions(); void check_mod_mult(); void check_linear_divisibility(); void check_mod_congruence(); }; }