equal
deleted
inserted
replaced
53 structure SMT_Solver: SMT_SOLVER = |
53 structure SMT_Solver: SMT_SOLVER = |
54 struct |
54 struct |
55 |
55 |
56 exception SMT_COUNTEREXAMPLE of bool * term list |
56 exception SMT_COUNTEREXAMPLE of bool * term list |
57 |
57 |
58 val theory_of = Context.cases I ProofContext.theory_of |
|
59 |
|
60 |
58 |
61 datatype interface = Interface of { |
59 datatype interface = Interface of { |
62 normalize: SMT_Normalize.config list, |
60 normalize: SMT_Normalize.config list, |
63 translate: SMT_Translate.config } |
61 translate: SMT_Translate.config } |
64 |
62 |
175 ) |
173 ) |
176 |
174 |
177 val solver_name_of = snd o SelectedSolver.get |
175 val solver_name_of = snd o SelectedSolver.get |
178 |
176 |
179 fun select_solver name gen = |
177 fun select_solver name gen = |
180 if is_none (lookup_solver (theory_of gen) name) |
178 if is_none (lookup_solver (Context.theory_of gen) name) |
181 then error ("SMT solver not registered: " ^ quote name) |
179 then error ("SMT solver not registered: " ^ quote name) |
182 else SelectedSolver.map (K (serial (), name)) gen |
180 else SelectedSolver.map (K (serial (), name)) gen |
183 |
181 |
184 fun raw_solver_of gen = |
182 fun raw_solver_of gen = |
185 (case lookup_solver (theory_of gen) (solver_name_of gen) of |
183 (case lookup_solver (Context.theory_of gen) (solver_name_of gen) of |
186 NONE => error "No SMT solver selected" |
184 NONE => error "No SMT solver selected" |
187 | SOME (s, _) => s) |
185 | SOME (s, _) => s) |
188 |
186 |
189 val solver_of = gen_solver o raw_solver_of |
187 val solver_of = gen_solver o raw_solver_of |
190 |
188 |
226 setup_trace |
224 setup_trace |
227 |
225 |
228 fun print_setup gen = |
226 fun print_setup gen = |
229 let |
227 let |
230 val t = string_of_int (Config.get_generic gen timeout) |
228 val t = string_of_int (Config.get_generic gen timeout) |
231 val names = sort string_ord (all_solver_names_of (theory_of gen)) |
229 val names = sort string_ord (all_solver_names_of (Context.theory_of gen)) |
232 val ns = if null names then [no_solver] else names |
230 val ns = if null names then [no_solver] else names |
233 val take_info = (fn (_, []) => NONE | info => SOME info) |
231 val take_info = (fn (_, []) => NONE | info => SOME info) |
234 val infos = |
232 val infos = |
235 theory_of gen |
233 Context.theory_of gen |
236 |> Symtab.dest o Solvers.get |
234 |> Symtab.dest o Solvers.get |
237 |> map_filter (fn (n, (_, info)) => take_info (n, info gen)) |
235 |> map_filter (fn (n, (_, info)) => take_info (n, info gen)) |
238 |> sort (prod_ord string_ord (K EQUAL)) |
236 |> sort (prod_ord string_ord (K EQUAL)) |
239 |> map (fn (n, ps) => Pretty.big_list (n ^ ":") ps) |
237 |> map (fn (n, ps) => Pretty.big_list (n ^ ":") ps) |
240 in |
238 in |