Skip to content

Commit 7d57b3f

Browse files
committed
Accept late conflict clauses, closes #4
1 parent 12fed8a commit 7d57b3f

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/core/internal.ml

+15-4
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,9 @@ module Make
630630
let size = ref 1 in
631631
let history = ref [] in
632632
assert (decision_level () > 0);
633+
let conflict_level =
634+
Array.fold_left (fun acc p -> max acc p.var.v_level) 0 c_clause.atoms
635+
in
633636
while !cond do
634637
begin match !c.cpremise with
635638
| History _ -> clause_bump_activity !c
@@ -651,8 +654,8 @@ module Make
651654
seen := q :: !seen;
652655
if q.var.v_level > 0 then begin
653656
var_bump_activity q.var;
654-
if q.var.v_level >= decision_level () then begin
655-
incr pathC
657+
if q.var.v_level >= conflict_level then begin
658+
incr pathC;
656659
end else begin
657660
learnt := q :: !learnt;
658661
incr size;
@@ -663,15 +666,23 @@ module Make
663666
done;
664667

665668
(* look for the next node to expand *)
666-
while not (get_atom !tr_ind).var.seen do decr tr_ind done;
667-
decr pathC;
669+
while
670+
let q = get_atom !tr_ind in
671+
(not q.var.seen) ||
672+
(q.var.v_level < conflict_level)
673+
do
674+
decr tr_ind;
675+
done;
668676
let p = get_atom !tr_ind in
677+
decr pathC;
669678
decr tr_ind;
670679
match !pathC, p.var.reason with
671680
| 0, _ ->
672681
cond := false;
673682
learnt := p.neg :: (List.rev !learnt)
674683
| n, Some Bcp cl ->
684+
assert (n > 0);
685+
assert (p.var.v_level >= conflict_level);
675686
c := cl
676687
| n, _ -> assert false
677688
done;

0 commit comments

Comments
 (0)