mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-07 19:55:41 -05:00
[bugfix?] Avoid forgetting theory conflict clauses
When theory raises a conflict, it is analysed, and the backtracck clause that result is added to the solver, however, I didn't find yet a satisfying answer as to wether the original clause is implied (or not) by this backtrack clause, so in order not to lose information, we also add the original conflict clause when it comes from the theory (because if not, then it comes from a conflict detected during propgation, so the conflict clause is actually already attached).
This commit is contained in:
parent
9a393c130a
commit
3124d55209
1 changed files with 8 additions and 1 deletions
|
|
@ -1006,7 +1006,14 @@ module Make
|
|||
match propagate () with
|
||||
| Some confl -> (* Conflict *)
|
||||
incr conflictC;
|
||||
(* When the theory has raised Unsat, add_boolean_conflict
|
||||
might 'forget' the initial conflict clause, and only add the
|
||||
analyzed backtrack clause. So in those case, we use add_clause
|
||||
to make sure the initial conflict clause is also added. *)
|
||||
if confl.attached then
|
||||
add_boolean_conflict confl
|
||||
else
|
||||
add_clause confl
|
||||
|
||||
| None -> (* No Conflict *)
|
||||
assert (env.elt_head = Vec.size env.elt_queue);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue