equal
deleted
inserted
replaced
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) => |