delay addition of clauses to internal sat solver until solve()

This commit is contained in:
Simon Cruanes 2018-05-09 21:09:55 -05:00
parent 441ca61465
commit 36df2d952b

View file

@ -698,7 +698,6 @@ module Make
- if clause is unit, propagate lit immediately (with clause as justification) - if clause is unit, propagate lit immediately (with clause as justification)
but do not add clause but do not add clause
TODO: also, remove buffering of clauses to add
*) *)
(* add permanent clause, to be kept down to level 0. (* add permanent clause, to be kept down to level 0.
@ -1143,24 +1142,13 @@ module Make
try add_clauses() try add_clauses()
with Sat -> () with Sat -> ()
(* TODO: merge with add_clause_user *)
let assume ~permanent st ?tag cnf = let assume ~permanent st ?tag cnf =
let cs = List.rev_map List.iter
(fun atoms -> (fun atoms ->
let atoms = List.rev_map (new_atom ~permanent st) atoms in let atoms = List.rev_map (new_atom ~permanent st) atoms in
Clause.make_l ?tag atoms Hyp) let c = Clause.make_l ?tag atoms Hyp in
add_clause_user st ~permanent c)
cnf cnf
in
let add_clauses () =
List.iter
(fun c ->
Log.debugf 5 (fun k -> k "(@[sat.assume@ %a@])" Clause.debug c);
add_clause ~permanent:false st c)
cs
in
if permanent
then redo_down_to_level_0 st add_clauses
else add_clauses()
(* TODO: remove push/pop *) (* TODO: remove push/pop *)
(* create a factice decision level for local assumptions *) (* create a factice decision level for local assumptions *)