mirror of
https://github.com/Z3Prover/z3
synced 2025-06-27 08:28:44 +00:00
add parameter to control congruence terms in slicing
This commit is contained in:
parent
8b90a45233
commit
f2d1ed7b07
4 changed files with 5 additions and 0 deletions
|
@ -6,5 +6,6 @@ def_module_params('polysat',
|
||||||
('max_decisions', UINT, UINT_MAX, "maximum number of decisions before giving up"),
|
('max_decisions', UINT, UINT_MAX, "maximum number of decisions before giving up"),
|
||||||
('log', UINT, UINT_MAX, "polysat logging filter (enable logging in iteration N)"),
|
('log', UINT, UINT_MAX, "polysat logging filter (enable logging in iteration N)"),
|
||||||
('log_conflicts', BOOL, False, "log conflicts"),
|
('log_conflicts', BOOL, False, "log conflicts"),
|
||||||
|
('slicing.congruence', BOOL, False, "bitvector slicing: add virtual congruence terms"),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -332,6 +332,8 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
|
|
||||||
void slicing::update_var_congruences() {
|
void slicing::update_var_congruences() {
|
||||||
|
if (!m_solver.config().m_slicing_congruence)
|
||||||
|
return;
|
||||||
for (pvar v : m_needs_congruence)
|
for (pvar v : m_needs_congruence)
|
||||||
add_congruence(v);
|
add_congruence(v);
|
||||||
m_needs_congruence.reset();
|
m_needs_congruence.reset();
|
||||||
|
|
|
@ -82,6 +82,7 @@ namespace polysat {
|
||||||
m_config.m_max_decisions = pp.max_decisions();
|
m_config.m_max_decisions = pp.max_decisions();
|
||||||
m_config.m_log_iteration = pp.log();
|
m_config.m_log_iteration = pp.log();
|
||||||
m_config.m_log_conflicts = pp.log_conflicts();
|
m_config.m_log_conflicts = pp.log_conflicts();
|
||||||
|
m_config.m_slicing_congruence = pp.slicing_congruence();
|
||||||
|
|
||||||
// TODO: log filter to enable/disable based on submodules
|
// TODO: log filter to enable/disable based on submodules
|
||||||
if (m_config.m_log_iteration == 0)
|
if (m_config.m_log_iteration == 0)
|
||||||
|
|
|
@ -48,6 +48,7 @@ namespace polysat {
|
||||||
uint64_t m_max_decisions = std::numeric_limits<uint64_t>::max();
|
uint64_t m_max_decisions = std::numeric_limits<uint64_t>::max();
|
||||||
unsigned m_log_iteration = UINT_MAX;
|
unsigned m_log_iteration = UINT_MAX;
|
||||||
bool m_log_conflicts = false;
|
bool m_log_conflicts = false;
|
||||||
|
bool m_slicing_congruence = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue