mirror of
https://github.com/Z3Prover/z3
synced 2025-07-29 07:27:57 +00:00
add option to selectively disable variable solving for only ground expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
1a488bb67a
commit
e54928679f
3 changed files with 10 additions and 1 deletions
|
@ -119,7 +119,10 @@ namespace euf {
|
||||||
SASSERT(j == var2id(v));
|
SASSERT(j == var2id(v));
|
||||||
if (m_fmls.frozen(v))
|
if (m_fmls.frozen(v))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!m_config.m_enable_non_ground && has_quantifiers(t))
|
||||||
|
continue;
|
||||||
|
|
||||||
bool is_safe = true;
|
bool is_safe = true;
|
||||||
unsigned todo_sz = todo.size();
|
unsigned todo_sz = todo.size();
|
||||||
|
|
||||||
|
@ -127,7 +130,10 @@ namespace euf {
|
||||||
// all time-stamps must be at or above current level
|
// all time-stamps must be at or above current level
|
||||||
// unexplored variables that are part of substitution are appended to work list.
|
// unexplored variables that are part of substitution are appended to work list.
|
||||||
SASSERT(m_todo.empty());
|
SASSERT(m_todo.empty());
|
||||||
|
|
||||||
|
|
||||||
m_todo.push_back(t);
|
m_todo.push_back(t);
|
||||||
|
verbose_stream() << "check " << mk_pp(t, m) << "\n";
|
||||||
expr_fast_mark1 visited;
|
expr_fast_mark1 visited;
|
||||||
while (!m_todo.empty()) {
|
while (!m_todo.empty()) {
|
||||||
expr* e = m_todo.back();
|
expr* e = m_todo.back();
|
||||||
|
@ -336,6 +342,7 @@ namespace euf {
|
||||||
m_rewriter.updt_params(p);
|
m_rewriter.updt_params(p);
|
||||||
smt_params_helper sp(p);
|
smt_params_helper sp(p);
|
||||||
m_config.m_enabled = sp.solve_eqs();
|
m_config.m_enabled = sp.solve_eqs();
|
||||||
|
m_config.m_enable_non_ground = sp.solve_eqs_non_ground();
|
||||||
}
|
}
|
||||||
|
|
||||||
void solve_eqs::collect_param_descrs(param_descrs& r) {
|
void solve_eqs::collect_param_descrs(param_descrs& r) {
|
||||||
|
|
|
@ -42,6 +42,7 @@ namespace euf {
|
||||||
bool m_context_solve = true;
|
bool m_context_solve = true;
|
||||||
unsigned m_max_occs = UINT_MAX;
|
unsigned m_max_occs = UINT_MAX;
|
||||||
bool m_enabled = true;
|
bool m_enabled = true;
|
||||||
|
bool m_enable_non_ground = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
stats m_stats;
|
stats m_stats;
|
||||||
|
|
|
@ -20,6 +20,7 @@ def_module_params(module_name='smt',
|
||||||
('delay_units_threshold', UINT, 32, 'maximum number of learned unit clauses before restarting, ignored if delay_units is false'),
|
('delay_units_threshold', UINT, 32, 'maximum number of learned unit clauses before restarting, ignored if delay_units is false'),
|
||||||
('elim_unconstrained', BOOL, True, 'pre-processing: eliminate unconstrained subterms'),
|
('elim_unconstrained', BOOL, True, 'pre-processing: eliminate unconstrained subterms'),
|
||||||
('solve_eqs', BOOL, True, 'pre-processing: solve equalities'),
|
('solve_eqs', BOOL, True, 'pre-processing: solve equalities'),
|
||||||
|
('solve_eqs.non_ground', BOOL, True, 'pre-processing: solve equalities. Allow eliminating variables by non-ground solutions which can break behavior for model evaluation.'),
|
||||||
('propagate_values', BOOL, True, 'pre-processing: propagate values'),
|
('propagate_values', BOOL, True, 'pre-processing: propagate values'),
|
||||||
('bound_simplifier', BOOL, True, 'apply bounds simplification during pre-processing'),
|
('bound_simplifier', BOOL, True, 'apply bounds simplification during pre-processing'),
|
||||||
('pull_nested_quantifiers', BOOL, False, 'pre-processing: pull nested quantifiers'),
|
('pull_nested_quantifiers', BOOL, False, 'pre-processing: pull nested quantifiers'),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue