mirror of
https://github.com/Z3Prover/z3
synced 2025-10-01 05:29:28 +00:00
propagate value initialization to atoms
This commit is contained in:
parent
eae4de075b
commit
6173a0d025
5 changed files with 53 additions and 8 deletions
|
@ -42,6 +42,7 @@ SpaceInEmptyParentheses: false
|
||||||
SpacesInCStyleCastParentheses: false
|
SpacesInCStyleCastParentheses: false
|
||||||
SpacesInParentheses: false
|
SpacesInParentheses: false
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
|
IndentCaseLabels: false
|
||||||
|
|
||||||
# Alignment
|
# Alignment
|
||||||
AlignConsecutiveAssignments: false
|
AlignConsecutiveAssignments: false
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
BasedOnStyle: Google
|
|
||||||
IndentWidth: 4
|
|
||||||
ColumnLimit: 0
|
|
||||||
NamespaceIndentation: All
|
|
||||||
BreakBeforeBraces: Attach
|
|
|
@ -3768,6 +3768,55 @@ namespace smt {
|
||||||
TRACE(literal_occ, display_literal_num_occs(tout););
|
TRACE(literal_occ, display_literal_num_occs(tout););
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void context::initialize_values() {
|
||||||
|
if (m_values.empty())
|
||||||
|
return;
|
||||||
|
expr_safe_replace sub(m);
|
||||||
|
for (auto const &[var, value] : m_values) {
|
||||||
|
initialize_value(var, value);
|
||||||
|
sub.insert(var, value);
|
||||||
|
}
|
||||||
|
for (unsigned v = 0; v < get_num_bool_vars(); ++v) {
|
||||||
|
expr_ref var(bool_var2expr(v), m);
|
||||||
|
if (!var)
|
||||||
|
continue;
|
||||||
|
sub(var);
|
||||||
|
m_rewriter(var);
|
||||||
|
|
||||||
|
if (m.is_true(var)) {
|
||||||
|
m_bdata[v].m_phase_available = true;
|
||||||
|
m_bdata[v].m_phase = true;
|
||||||
|
}
|
||||||
|
else if (m.is_false(var)) {
|
||||||
|
m_bdata[v].m_phase_available = true;
|
||||||
|
m_bdata[v].m_phase = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (clause *cls : m_aux_clauses) {
|
||||||
|
literal undef_lit = null_literal;
|
||||||
|
bool is_true = false;
|
||||||
|
for (auto lit : *cls) {
|
||||||
|
auto v = lit.var();
|
||||||
|
if (m_bdata[v].m_phase_available) {
|
||||||
|
bool phase = m_bdata[v].m_phase;
|
||||||
|
if (lit.sign() != phase) {
|
||||||
|
is_true = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
undef_lit = lit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!is_true && undef_lit != null_literal) {
|
||||||
|
auto v = undef_lit.var();
|
||||||
|
m_bdata[v].m_phase_available = true;
|
||||||
|
m_bdata[v].m_phase = !undef_lit.sign();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void context::end_search() {
|
void context::end_search() {
|
||||||
m_case_split_queue->end_search_eh();
|
m_case_split_queue->end_search_eh();
|
||||||
}
|
}
|
||||||
|
@ -3820,8 +3869,7 @@ namespace smt {
|
||||||
TRACE(search, display(tout); display_enodes_lbls(tout););
|
TRACE(search, display(tout); display_enodes_lbls(tout););
|
||||||
TRACE(search_detail, m_asserted_formulas.display(tout););
|
TRACE(search_detail, m_asserted_formulas.display(tout););
|
||||||
init_search();
|
init_search();
|
||||||
for (auto const& [var, value] : m_values)
|
initialize_values();
|
||||||
initialize_value(var, value);
|
|
||||||
|
|
||||||
flet<bool> l(m_searching, true);
|
flet<bool> l(m_searching, true);
|
||||||
TRACE(after_init_search, display(tout););
|
TRACE(after_init_search, display(tout););
|
||||||
|
|
|
@ -269,6 +269,7 @@ namespace smt {
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
vector<std::pair<expr_ref, expr_ref>> m_values;
|
vector<std::pair<expr_ref, expr_ref>> m_values;
|
||||||
void initialize_value(expr* var, expr* value);
|
void initialize_value(expr* var, expr* value);
|
||||||
|
void initialize_values();
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue