| 1 | :- module(solver_dispatcher, [init_interface/1,reset_interface/1,smt_solver_interface_call/2, | |
| 2 | pretty_print_smt/1, pretty_print_smt/2]). | |
| 3 | ||
| 4 | :- use_module(probsrc(module_information),[module_info/2]). | |
| 5 | :- module_info(group,smt_solvers). | |
| 6 | :- module_info(description,'This module provides an interface to SMT-solvers like CVC4 or Z3.'). | |
| 7 | ||
| 8 | :- use_module(extension('cvc4interface/cvc4interface')). | |
| 9 | :- use_module(extension('z3interface/z3interface')). | |
| 10 | ||
| 11 | :- use_module(probsrc(debug), [debug_format_flush/3]). | |
| 12 | ||
| 13 | init_interface(cvc4) :- | |
| 14 | init_cvc4interface. | |
| 15 | init_interface(z3) :- | |
| 16 | init_z3interface. | |
| 17 | reset_interface(cvc4) :- | |
| 18 | reset_cvc4interface. | |
| 19 | reset_interface(z3) :- | |
| 20 | reset_z3interface. | |
| 21 | ||
| 22 | :- meta_predicate smt_solver_interface_call(+,+). | |
| 23 | smt_solver_interface_call(z3,Call) :- | |
| 24 | %debug_format(9,'z3: calling ~w~n',[Call]), | |
| 25 | z3_interface_call(Call), | |
| 26 | debug_format_flush(9,'z3: called ~w~n',[Call]). | |
| 27 | smt_solver_interface_call(cvc4,Call) :- | |
| 28 | debug_format_flush(9,'cvc4: calling ~w~n',[Call]), | |
| 29 | cvc4_interface_call(Call). | |
| 30 | ||
| 31 | pretty_print_smt(z3) :- !,pretty_print_smt2. | |
| 32 | pretty_print_smt(Solver) :- format('Pretty print not available for ~w~n',[Solver]). | |
| 33 | ||
| 34 | pretty_print_smt(z3,ExprID) :- !,pretty_print_smt2_for_id(ExprID). | |
| 35 | pretty_print_smt(Solver,_) :- format('Pretty print not available for ~w~n',[Solver]). |