--- a/src/HOL/Tools/sat_funcs.ML Tue Oct 27 16:02:43 2009 +0100
+++ b/src/HOL/Tools/sat_funcs.ML Tue Oct 27 16:03:06 2009 +0100
@@ -346,11 +346,16 @@
fold Thm.weaken (rev sorted_clauses) False_thm
end
in
- case (tracing ("Invoking solver " ^ (!solver)); SatSolver.invoke_solver (!solver) fm) of
+ case
+ let val the_solver = ! solver
+ in (tracing ("Invoking solver " ^ the_solver); SatSolver.invoke_solver the_solver fm) end
+ of
SatSolver.UNSATISFIABLE (SOME (clause_table, empty_id)) => (
if !trace_sat then
tracing ("Proof trace from SAT solver:\n" ^
- "clauses: " ^ ML_Syntax.print_list (ML_Syntax.print_pair Int.toString (ML_Syntax.print_list Int.toString)) (Inttab.dest clause_table) ^ "\n" ^
+ "clauses: " ^ ML_Syntax.print_list
+ (ML_Syntax.print_pair Int.toString (ML_Syntax.print_list Int.toString))
+ (Inttab.dest clause_table) ^ "\n" ^
"empty clause: " ^ Int.toString empty_id)
else ();
if !quick_and_dirty then
@@ -388,8 +393,9 @@
val msg = "SAT solver found a countermodel:\n"
^ (commas
o map (fn (term, idx) =>
- Syntax.string_of_term_global @{theory} term ^ ": "
- ^ (case assignment idx of NONE => "arbitrary" | SOME true => "true" | SOME false => "false")))
+ Syntax.string_of_term_global @{theory} term ^ ": " ^
+ (case assignment idx of NONE => "arbitrary"
+ | SOME true => "true" | SOME false => "false")))
(Termtab.dest atom_table)
in
raise THM (msg, 0, [])
--- a/src/HOL/Tools/sat_solver.ML Tue Oct 27 16:02:43 2009 +0100
+++ b/src/HOL/Tools/sat_solver.ML Tue Oct 27 16:03:06 2009 +0100
@@ -370,13 +370,13 @@
(* string * solver -> unit *)
- fun add_solver (name, new_solver) =
+ fun add_solver (name, new_solver) = CRITICAL (fn () =>
let
val the_solvers = !solvers;
val _ = if AList.defined (op =) the_solvers name
then warning ("SAT solver " ^ quote name ^ " was defined before")
else ();
- in solvers := AList.update (op =) (name, new_solver) the_solvers end;
+ in solvers := AList.update (op =) (name, new_solver) the_solvers end);
(* ------------------------------------------------------------------------- *)
(* invoke_solver: returns the solver associated with the given 'name' *)