src/HOL/Tools/sat_solver.ML
changeset 14753 f40b45db8cf0
parent 14703 837d7180c39a
child 14805 eff7b9df27e9
equal deleted inserted replaced
14752:3fc3c7b7e99d 14753:f40b45db8cf0
   228 (* ------------------------------------------------------------------------- *)
   228 (* ------------------------------------------------------------------------- *)
   229 (* Predefined SAT solvers                                                    *)
   229 (* Predefined SAT solvers                                                    *)
   230 (* ------------------------------------------------------------------------- *)
   230 (* ------------------------------------------------------------------------- *)
   231 
   231 
   232 (* ------------------------------------------------------------------------- *)
   232 (* ------------------------------------------------------------------------- *)
   233 (* Internal SAT solver, available as 'SatSolver.solve "enumerate"' -- simply *)
   233 (* Internal SAT solver, available as 'SatSolver.invoke_solver "enumerate"'   *)
   234 (* enumerates assignments until a satisfying assignment is found             *)
   234 (* -- simply enumerates assignments until a satisfying assignment is found   *)
   235 (* ------------------------------------------------------------------------- *)
   235 (* ------------------------------------------------------------------------- *)
   236 
   236 
   237 let
   237 let
   238 	fun enum_solver fm =
   238 	fun enum_solver fm =
   239 	let
   239 	let
   270 in
   270 in
   271 	SatSolver.add_solver ("enumerate", Some o enum_solver)
   271 	SatSolver.add_solver ("enumerate", Some o enum_solver)
   272 end;
   272 end;
   273 
   273 
   274 (* ------------------------------------------------------------------------- *)
   274 (* ------------------------------------------------------------------------- *)
   275 (* Internal SAT solver, available as 'SatSolver.solve "dpll"' -- a simple    *)
   275 (* Internal SAT solver, available as 'SatSolver.invoke_solver "dpll"' -- a   *)
   276 (* implementation of the DPLL algorithm (cf. L. Zhang, S. Malik: "The Quest  *)
   276 (* simple implementation of the DPLL algorithm (cf. L. Zhang, S. Malik: "The *)
   277 (* for Efficient Boolean Satisfiability Solvers", July 2002, Fig. 1).        *)
   277 (* Quest for Efficient Boolean Satisfiability Solvers", July 2002, Fig. 1).  *)
   278 (* ------------------------------------------------------------------------- *)
   278 (* ------------------------------------------------------------------------- *)
   279 
   279 
   280 let
   280 let
   281 	local
   281 	local
   282 		open PropLogic
   282 		open PropLogic
   357 in
   357 in
   358 	SatSolver.add_solver ("dpll", Some o dpll_solver)
   358 	SatSolver.add_solver ("dpll", Some o dpll_solver)
   359 end;
   359 end;
   360 
   360 
   361 (* ------------------------------------------------------------------------- *)
   361 (* ------------------------------------------------------------------------- *)
   362 (* Internal SAT solver, available as 'SatSolver.solve "auto"': uses the      *)
   362 (* Internal SAT solver, available as 'SatSolver.invoke_solver "auto"': uses  *)
   363 (* first installed solver (other than "auto" itself)                         *)
   363 (* the first installed solver (other than "auto" itself)                     *)
   364 (* ------------------------------------------------------------------------- *)
   364 (* ------------------------------------------------------------------------- *)
   365 
   365 
   366 let
   366 let
   367 	fun auto_solver fm =
   367 	fun auto_solver fm =
   368 		get_first (fn (name,solver) =>
   368 		get_first (fn (name,solver) =>