in include/poac/core/resolver.hpp [140:159]
void multiple_versions_cnf(const std::vector<int>& clause, std::vector<std::vector<int>>& clauses) {
const int combinations = 1 << clause.size();
for (int u = 0; u < combinations; ++u) { // index sequence
boost::dynamic_bitset<> bs(to_bin_str(u, clause.size()));
if (bs.count() == 1) {
continue;
}
std::vector<int> new_clause;
for (std::size_t j = 0; j < bs.size(); ++j) {
if (bs[j] == 0) {
new_clause.push_back(clause[j]);
}
else {
new_clause.push_back(clause[j] * -1);
}
}
clauses.emplace_back(new_clause);
}
}