* Assign boolean variables only to long-lived constraints, and deduplicate constraints when they are created
* scoped_signed_constraint
* update other classes
* fix
* Don't use scoped_ptr<constraint> with dedup()
* Rename solver_scope for fixplex tests
(otherwise the wrong constructor is called for polysat's solver_scope)
* Update conflict_core
* simplify
* Be clearer about constraint_literal lifetime
* remove old comment
* Remove status (positive/negative) from constraint
* Use constraint_literal in the solver
* Fix build (constraint -> get_constraint)
* Refactor: remove sign and dep from constraint
* fix some bugs
* improve log messages
* Add missing premises to lemma
* Rename getter in an attempt to fix linux build
* update example to match slides
* Add normalized view of inequalities
* workaround
* Add a conflict explanation rule
* unit clauses should be asserted at the base level
* Add src constraint to interval
* support non-strict case in first rule
* print conflict constraints only once
* update second rule
* update third rule as well
* update include paths
* bdd fixes
* update/fix some tests
* work around assertion failure when constraint from clause becomes unit
* Remove old code
* use clause_builder
* Verify model when returning SAT
* log
* fix
* display constraint's extra info in one place
* Add stub for conflict explainer
* Add helper functions to check whether constraint is active at base level
* Add helper class tmp_assign
* Add clause_builder; it skips unnecessary literals during clause creation
* some fixes
* Use clause_builder for forbidden intervals
* remove old comments
* fixes/comments in solver
* print redundant clauses
* First pass at conflict_explainer
* remove unused model class
* Choose value for k
* also print min/max k
* Add macro to disable linear solver for development
* Move new_* and add_* to header
* Add ref_vector_core::push_back(ref<T>&&)
* Attempt to simplify lifetime handling
* Make operator bool() explicit
* clause improvements
* display boolean assignment
* clause::resolve
* bug fixes
* more fixes
* final case of backtrack
* Extend search state by boolean literals
* Only resolve against positive equality
* mk_dep_ref
* Make clause non-owning
* scoped_clause
* Use scoped_clause
* minor
* scoped_ptr move assignment
* WIP: internal handling of disjunctive constraints
* leaf_value
* disjunctive constraints continued
* Fix bool_lit
* Actually add constraints to storage
* Some fixes
* more fixes
* constraint should have a bool_lit instead of a bool_var
* propagate(bool_lit)
* updates
* interface changes
* small fixes
* Make sat::dimacs_lit's constructor explicit
(otherwise, calling operator<< with sat::literal is ambiguous)
* Use sat::literal
* Print test name at the beginning
* Convention: constraint corresponds to the positive boolean literal
* Make constraint ownership more explicit
* clause stores literals
* Use scoped_ptr for condition
* Check solver result in unit tests
* Add test for unusual cjust
* Add solver::get_value
* Broken assertion
* Support forbidden interval for coefficient -1
* Rename to neg_cond
* Add some logging utilities
* Implement case of forbidden interval covering the whole domain
* Implement diseq_narrow
* Do not activate constraint if we are in a conflict state
* comments
* Assert that lemma isn't undefined
* Update revert_decision to work in the case where narrowing causes propagation
* Fix case of non-disjunctive lemma from forbidden intervals
* Conflict should not leak outside user scope
* Add guard to decide(), some notes
* Add test case
* Add constraints to watchlist of unassigned variable during propagation
* Move common propagation functionality into base class
* Combine eq/diseq narrow
* Compute forbidden interval for equality constraints by considering them as p <=u 0 (or p >u 0 for disequalities)
* Separate constraint creation from activation
* Basic recursive handling of disjunctive lemmas for unit tests
* Set learned constraint to true immediately
* Preliminary support for negated constraints
* Add helper to check whether pdd is univariate and linear
* Reorganize propagate/narrow of eq_constraint
* Implement propagate/narrow for ule constraints
* Also push trail instruction in push_viable
* Implement phase saving
* Implement signed comparison on BDD vectors
* Add fdd::non_zero
* Simplify construction of fdds over disjoint variables
* Minor changes to adding constraint
* Coding style
* Simplify bddv class
* mk_eq: run loop from below
* Add unit test for bddv unsigned comparison
* Add test that shows contains_num/find_num fail after reordering
* Add BDD vector subtraction
* Call apply_rec in mk_ite_rec instead of apply
* Question about mk_quant
* Implement quot_rem over BDD vectors
* Move shl/shr to bddv
* Make unit test smaller
* Add class dd::fdd to manage association between BDDs and numbers
* Remove contains_num/find_num from bdd_manager
* Fix XOR over BDDs
* Add operator<< for find_int_t
* Add equality assertion macro that prints expression values on failure
* Adapt contains_int and find_int to take externally-defined bits
* Add more operations on BDD vectors
* Remove old functions
* Additional bddv functions
* Rename some things
* Make bddv a class and add operators
* Fix find_num/contains_num calls
* Add a few helper methods for encoding sets of integers as BDDs
* Use BDD functions in solver
* Add bdd::find_int
* Use bdd::find_int in solver
* Add narrowing for linear equality constraints
* Simplify code for linear propagation
* Add test for later
* Narrowing can only handle linear constraints with a single variable
* Need to push_cjust