mirror of
https://github.com/Z3Prover/z3
synced 2025-07-18 18:36:41 +00:00
more
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ca74f696b5
commit
47fd9d8e18
1 changed files with 20 additions and 17 deletions
|
@ -9,6 +9,9 @@ Abstract:
|
||||||
|
|
||||||
Based on CMS (crypto minisat by Mate Soos).
|
Based on CMS (crypto minisat by Mate Soos).
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- if use-matrices is false, maybe just disable xor? That is don't support dual approach
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,25 +51,28 @@ namespace xr {
|
||||||
|
|
||||||
XorFinder finder(NULL, solver);
|
XorFinder finder(NULL, solver);
|
||||||
|
|
||||||
for(auto& x: m_solver->xorclauses_unused) m_solver->xorclauses.push_back(std::move(x));
|
for (auto& x: m_solver->xorclauses_unused)
|
||||||
m_solver->xorclauses_unused.clear();
|
m_xor.xorclauses.push_back(std::move(x));
|
||||||
m_solver->clauseCleaner->clean_xor_clauses(solver->xorclauses);
|
m_xor.xorclauses_unused.clear();
|
||||||
|
m_xor.clauseCleaner->clean_xor_clauses(solver->xorclauses);
|
||||||
|
|
||||||
finder.grab_mem();
|
finder.grab_mem();
|
||||||
finder.move_xors_without_connecting_vars_to_unused();
|
finder.move_xors_without_connecting_vars_to_unused();
|
||||||
if (!finder.xor_together_xors(m_solver->xorclauses)) return false;
|
if (!finder.xor_together_xors(m_solver->xorclauses))
|
||||||
|
return false;
|
||||||
|
|
||||||
finder.move_xors_without_connecting_vars_to_unused();
|
finder.move_xors_without_connecting_vars_to_unused();
|
||||||
finder.clean_equivalent_xors(m_solver->xorclauses);
|
finder.clean_equivalent_xors(m_solver->xorclauses);
|
||||||
for(const auto& x: m_solver->xorclauses_unused)
|
for(const auto& x: m_xor.xorclauses_unused)
|
||||||
clash_vars_unused.insert(x.clash_vars.begin(), x.clash_vars.end());
|
clash_vars_unused.insert(x.clash_vars.begin(), x.clash_vars.end());
|
||||||
|
|
||||||
if (m_solver->xorclauses.size() < m_solver->conf.gaussconf.min_gauss_xor_clauses) {
|
if (m_xor.xorclauses.size() < m_sat.get_config().m_min_gauss_xor_clauses) {
|
||||||
can_detach = false;
|
can_detach = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Just one giant matrix.
|
//Just one giant matrix.
|
||||||
|
// if (m_sat.get_config().m_xor_gauss_do_matrix_find)
|
||||||
if (!m_solver->conf.gaussconf.doMatrixFind) {
|
if (!m_solver->conf.gaussconf.doMatrixFind) {
|
||||||
m_solver->gmatrices.push_back(new EGaussian(m_solver, 0, m_solver->xorclauses));
|
m_solver->gmatrices.push_back(new EGaussian(m_solver, 0, m_solver->xorclauses));
|
||||||
m_solver->gqueuedata.resize(m_solver->gmatrices.size());
|
m_solver->gqueuedata.resize(m_solver->gmatrices.size());
|
||||||
|
@ -74,8 +80,8 @@ namespace xr {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint32_t> newSet;
|
std::vector<uint32_t> newSet;
|
||||||
set<uint32_t> tomerge;
|
uint_set tomerge;
|
||||||
for (const constraint& x : m_solver->m_constraints) {
|
for (const constraint& x : m_xor.m_constraints) {
|
||||||
if (belong_same_matrix(x))
|
if (belong_same_matrix(x))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -101,19 +107,16 @@ namespace xr {
|
||||||
newSet.insert(newSet.end(), m_reverseTable[v].begin(), m_reverseTable[v].end());
|
newSet.insert(newSet.end(), m_reverseTable[v].begin(), m_reverseTable[v].end());
|
||||||
m_reverseTable.erase(v);
|
m_reverseTable.erase(v);
|
||||||
}
|
}
|
||||||
for (uint32_t i = 0; i < newSet.size(); i++)
|
for (auto j : newSet)
|
||||||
m_table[newSet[i]] = m_matrix_no;
|
m_table[j] = m_matrix_no;
|
||||||
m_reverseTable[m_matrix_no] = newSet;
|
m_reverseTable[m_matrix_no] = newSet;
|
||||||
m_matrix_no++;
|
m_matrix_no++;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t numMatrixes = set_matrixes();
|
set_matrixes();
|
||||||
|
|
||||||
const bool time_out = false;
|
#endif
|
||||||
|
return !m_sat.inconsistent();
|
||||||
return !m_solver->inconsistent();
|
|
||||||
#endif
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned xor_matrix_finder::set_matrixes() {
|
unsigned xor_matrix_finder::set_matrixes() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue