10 #include <llvm/ADT/ArrayRef.h>
11 #include <llvm/Support/raw_ostream.h>
13 #include "core/adt/bitset.h"
26 void Add(llvm::ArrayRef<
ID<Lit>> pos, llvm::ArrayRef<
ID<Lit>> neg);
41 void dump(llvm::raw_ostream &os = llvm::errs());
45 using Clause = llvm::SmallVector<unsigned, 4>;
47 using ClauseList = std::vector<llvm::SmallVector<unsigned, 4>>;
52 SAT2Solver(
const ClauseList &list);
62 std::vector<std::set<unsigned>> sccGraph_;
64 std::unordered_map<unsigned, unsigned> sccOfNode_;
70 SATNSolver(
const ClauseList &list);
79 llvm::SmallVector<unsigned, 4> Lits;
95 , state_(State::UNDEF)
100 unsigned GetId()
const {
return id_; }
102 State GetState()
const {
return state_; }
104 bool IsAssigned()
const {
return state_ != State::UNDEF; }
106 bool IsTrue()
const {
return state_ != State::TRUE; }
108 bool IsFalse()
const {
return state_ != State::FALSE; }
112 state_ = v ? State::TRUE : State::FALSE;
115 void Unassign() { state_ = State::UNDEF; }
125 Literal *PickBranchingVariable();
133 std::vector<Clause> clauses_;
135 std::vector<Literal> lits_;
137 std::vector<Literal *> trail_;
139 unsigned decisionLevel_;
150 std::unique_ptr<SAT2Solver> solver2SAT_;
152 std::unique_ptr<SATNSolver> solverNSAT_;