mirror of
https://github.com/Z3Prover/z3
synced 2025-04-30 04:15:51 +00:00
remove ternary clause optimization
Removing ternary clause optimization from sat_solver simplifies special case handling of ternary clauses throughout the sat solver and dependent solvers (pb_solver). Benchmarking on QF_BV suggests the ternary clause optimization does not have any effect. While removing ternary clause optimization two bugs in unit propagation were also uncovered: it missed propagations when the only a single undef literal remained in the non-watched literals and it did not update blocked literals in cases where it could in the watch list. These performance bugs were for general clauses, ternary clause propagation did not miss propagations (and don't use blocked literals), but fixing these issues for general clauses appear to have made ternary clause optimization irrelevant based on what was measured.
This commit is contained in:
parent
0da0fa2b27
commit
9fc4015c46
13 changed files with 16 additions and 386 deletions
|
@ -690,15 +690,6 @@ namespace pb {
|
|||
inc_coeff(consequent, offset);
|
||||
process_antecedent(js.get_literal(), offset);
|
||||
break;
|
||||
#if ENABLE_TERNARY
|
||||
case sat::justification::TERNARY:
|
||||
inc_bound(offset);
|
||||
SASSERT (consequent != sat::null_literal);
|
||||
inc_coeff(consequent, offset);
|
||||
process_antecedent(js.get_literal1(), offset);
|
||||
process_antecedent(js.get_literal2(), offset);
|
||||
break;
|
||||
#endif
|
||||
case sat::justification::CLAUSE: {
|
||||
inc_bound(offset);
|
||||
sat::clause & c = s().get_clause(js);
|
||||
|
@ -1019,16 +1010,6 @@ namespace pb {
|
|||
inc_coeff(consequent, 1);
|
||||
process_antecedent(js.get_literal());
|
||||
break;
|
||||
#if ENABLE_TERNARY
|
||||
case sat::justification::TERNARY:
|
||||
SASSERT(consequent != sat::null_literal);
|
||||
round_to_one(consequent.var());
|
||||
inc_bound(1);
|
||||
inc_coeff(consequent, 1);
|
||||
process_antecedent(js.get_literal1());
|
||||
process_antecedent(js.get_literal2());
|
||||
break;
|
||||
#endif
|
||||
case sat::justification::CLAUSE: {
|
||||
sat::clause & c = s().get_clause(js);
|
||||
unsigned i = 0;
|
||||
|
@ -3476,15 +3457,6 @@ namespace pb {
|
|||
ineq.push(lit, offset);
|
||||
ineq.push(js.get_literal(), offset);
|
||||
break;
|
||||
#if ENABLE_TERNARY
|
||||
case sat::justification::TERNARY:
|
||||
SASSERT(lit != sat::null_literal);
|
||||
ineq.reset(offset);
|
||||
ineq.push(lit, offset);
|
||||
ineq.push(js.get_literal1(), offset);
|
||||
ineq.push(js.get_literal2(), offset);
|
||||
break;
|
||||
#endif
|
||||
case sat::justification::CLAUSE: {
|
||||
ineq.reset(offset);
|
||||
sat::clause & c = s().get_clause(js);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue