Handle new clauses unsat at level >0 && <=base_lvl

This commit is contained in:
Guillaume Bury 2016-07-29 21:00:24 +02:00
parent 6eeaa8513c
commit 5fdffe1f85

View file

@ -749,6 +749,13 @@ module Make
match atoms with
| [] ->
report_unsat clause
| [a] ->
Log.debugf 5 "New unit clause, propagating : %a" (fun k->k St.pp_atom a);
cancel_until env.base_level;
if a.neg.is_true then begin
report_unsat clause
end else
enqueue_bool a 0 (Bcp clause)
| a::b::_ ->
if a.neg.is_true then begin
(* Atoms need to be sorted in decreasing order of decision level,
@ -766,10 +773,6 @@ module Make
enqueue_bool a lvl (Bcp clause)
end
end
| [a] ->
Log.debugf 5 "New unit clause, propagating : %a" (fun k->k St.pp_atom a);
cancel_until env.base_level;
enqueue_bool a 0 (Bcp clause)
with Trivial ->
Vec.push vec init;
Log.debugf 5 "Trivial clause ignored : @[%a@]" (fun k->k St.pp_clause init)