mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-06 11:15:43 -05:00
Ensure pushed clauses are added after if_sat slice
This commit is contained in:
parent
d1ebc59856
commit
216ca82fe7
1 changed files with 8 additions and 3 deletions
|
|
@ -843,6 +843,11 @@ module Make
|
||||||
Log.debugf 10 "Pushing clause %a" (fun k->k St.pp_clause c);
|
Log.debugf 10 "Pushing clause %a" (fun k->k St.pp_clause c);
|
||||||
Stack.push c env.clauses_pushed
|
Stack.push c env.clauses_pushed
|
||||||
|
|
||||||
|
let do_push () =
|
||||||
|
while not (Stack.is_empty env.clauses_pushed) do
|
||||||
|
add_clause (Stack.pop env.clauses_pushed)
|
||||||
|
done
|
||||||
|
|
||||||
let slice_propagate f lvl =
|
let slice_propagate f lvl =
|
||||||
let a = atom f in
|
let a = atom f in
|
||||||
Iheap.grow_to_by_double env.order (St.nb_elt ());
|
Iheap.grow_to_by_double env.order (St.nb_elt ());
|
||||||
|
|
@ -884,9 +889,7 @@ module Make
|
||||||
|
|
||||||
and propagate () =
|
and propagate () =
|
||||||
(* First, treat the pushed clause stack *)
|
(* First, treat the pushed clause stack *)
|
||||||
while not (Stack.is_empty env.clauses_pushed) do
|
do_push ();
|
||||||
add_clause (Stack.pop env.clauses_pushed)
|
|
||||||
done;
|
|
||||||
(* Now, check that the situation is sane *)
|
(* Now, check that the situation is sane *)
|
||||||
if env.elt_head > Vec.size env.elt_queue then
|
if env.elt_head > Vec.size env.elt_queue then
|
||||||
assert false
|
assert false
|
||||||
|
|
@ -1089,7 +1092,9 @@ module Make
|
||||||
n_of_conflicts := !n_of_conflicts *. env.restart_inc;
|
n_of_conflicts := !n_of_conflicts *. env.restart_inc;
|
||||||
n_of_learnts := !n_of_learnts *. env.learntsize_inc
|
n_of_learnts := !n_of_learnts *. env.learntsize_inc
|
||||||
| Sat ->
|
| Sat ->
|
||||||
|
assert (env.elt_head = Vec.size env.elt_queue);
|
||||||
Plugin.if_sat (full_slice ());
|
Plugin.if_sat (full_slice ());
|
||||||
|
do_push ();
|
||||||
if is_unsat () then raise Unsat
|
if is_unsat () then raise Unsat
|
||||||
else if env.elt_head = Vec.size env.elt_queue (* sanity check *)
|
else if env.elt_head = Vec.size env.elt_queue (* sanity check *)
|
||||||
&& env.elt_head = St.nb_elt () (* this is the important test to know if the search is finished *) then
|
&& env.elt_head = St.nb_elt () (* this is the important test to know if the search is finished *) then
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue