| 1 | /* | |
| 2 | * Exposes Glucose API to SICStus Prolog | |
| 3 | * | |
| 4 | * Based on SWI Prolog Minisat Integration by | |
| 5 | * Michael Codish, Vitaly Lagoon, Peter J. Stuckey | |
| 6 | ||
| 7 | * initial integration into ProB by Sebastian Krings | |
| 8 | * extensions (b_to_cnf, card support,...) and full integration by Michael Leuschel | |
| 9 | */ | |
| 10 | ||
| 11 | :- module(satsolver, [init_satsolver/0, | |
| 12 | new_solver/1, | |
| 13 | solve/1, | |
| 14 | delete_solver/1, | |
| 15 | add_clause/2, | |
| 16 | assign_model/2, | |
| 17 | get_model/2, | |
| 18 | toDimacs/2]). | |
| 19 | ||
| 20 | :- use_module('../../src/module_information.pl'). | |
| 21 | :- module_info(group,experimental). | |
| 22 | :- module_info(description,'This is the interface between ProB and the Glucose SAT solver'). | |
| 23 | ||
| 24 | :- use_module(probsrc(error_manager),[add_error/3]). | |
| 25 | ||
| 26 | foreign_resource('satsolver', [new_solver,solve,delete_solver, | |
| 27 | add_clause,assign_model,get_model,toDimacs]). | |
| 28 | ||
| 29 | foreign(new_solver, c, new_solver([-integer])). | |
| 30 | foreign(solve, c, solve(+integer)). | |
| 31 | foreign(delete_solver, c, delete_solver(+integer)). | |
| 32 | foreign(add_clause, c, add_clause(+integer,+term)). | |
| 33 | foreign(assign_model, c, assign_model(+integer,+term)). | |
| 34 | foreign(get_model, c, get_model(+integer,+term)). | |
| 35 | foreign(toDimacs, c, toDimacs(+integer,+string)). | |
| 36 | ||
| 37 | :- dynamic is_initialised/0. | |
| 38 | ||
| 39 | init_satsolver :- is_initialised,!. | |
| 40 | init_satsolver :- | |
| 41 | catch(load_foreign_resource(library(satsolver)),E, | |
| 42 | (add_error(satsolver,'Loading satsolver library failed, be sure to have satsolver.bundle/so/dll in the lib folder of ProB:',E), | |
| 43 | fail)), | |
| 44 | assertz(is_initialised). | |
| 45 | ||
| 46 | ||
| 47 |