128 type T = raw_param list |
128 type T = raw_param list |
129 val empty = default_default_params |> map (apsnd single) |
129 val empty = default_default_params |> map (apsnd single) |
130 val extend = I |
130 val extend = I |
131 fun merge p : T = AList.merge (op =) (K true) p) |
131 fun merge p : T = AList.merge (op =) (K true) p) |
132 |
132 |
133 fun remotify_prover_if_available_and_not_already_remote thy name = |
133 fun remotify_prover_if_available_and_not_already_remote ctxt name = |
134 if String.isPrefix remote_prefix name then |
134 if String.isPrefix remote_prefix name then |
135 SOME name |
135 SOME name |
136 else |
136 else |
137 let val remote_name = remote_prefix ^ name in |
137 let val remote_name = remote_prefix ^ name in |
138 if is_prover_available thy remote_name then SOME remote_name else NONE |
138 if is_prover_available ctxt remote_name then SOME remote_name else NONE |
139 end |
139 end |
140 |
140 |
141 fun remotify_prover_if_not_installed ctxt name = |
141 fun remotify_prover_if_not_installed ctxt name = |
142 let val thy = ProofContext.theory_of ctxt in |
142 if is_prover_available ctxt name andalso is_prover_installed ctxt name then |
143 if is_prover_available thy name andalso is_prover_installed ctxt name then |
143 SOME name |
144 SOME name |
144 else |
145 else |
145 remotify_prover_if_available_and_not_already_remote ctxt name |
146 remotify_prover_if_available_and_not_already_remote thy name |
|
147 end |
|
148 |
146 |
149 fun avoid_too_many_local_threads _ _ [] = [] |
147 fun avoid_too_many_local_threads _ _ [] = [] |
150 | avoid_too_many_local_threads thy 0 provers = |
148 | avoid_too_many_local_threads ctxt 0 provers = |
151 map_filter (remotify_prover_if_available_and_not_already_remote thy) provers |
149 map_filter (remotify_prover_if_available_and_not_already_remote ctxt) |
152 | avoid_too_many_local_threads thy n (prover :: provers) = |
150 provers |
|
151 | avoid_too_many_local_threads ctxt n (prover :: provers) = |
153 let val n = if String.isPrefix remote_prefix prover then n else n - 1 in |
152 let val n = if String.isPrefix remote_prefix prover then n else n - 1 in |
154 prover :: avoid_too_many_local_threads thy n provers |
153 prover :: avoid_too_many_local_threads ctxt n provers |
155 end |
154 end |
156 |
155 |
157 (* The first ATP of the list is used by Auto Sledgehammer. Because of the low |
156 (* The first ATP of the list is used by Auto Sledgehammer. Because of the low |
158 timeout, it makes sense to put SPASS first. *) |
157 timeout, it makes sense to put SPASS first. *) |
159 fun default_provers_param_value ctxt = |
158 fun default_provers_param_value ctxt = |
160 let val thy = ProofContext.theory_of ctxt in |
159 [spassN, eN, vampireN, sine_eN, SMT_Solver.solver_name_of ctxt] |
161 [spassN, eN, vampireN, sine_eN, smtN] |
160 |> map_filter (remotify_prover_if_not_installed ctxt) |
162 |> map_filter (remotify_prover_if_not_installed ctxt) |
161 |> avoid_too_many_local_threads ctxt (Multithreading.max_threads_value ()) |
163 |> avoid_too_many_local_threads thy (Multithreading.max_threads_value ()) |
162 |> space_implode " " |
164 |> space_implode " " |
|
165 end |
|
166 |
163 |
167 val set_default_raw_param = Data.map o AList.update (op =) o unalias_raw_param |
164 val set_default_raw_param = Data.map o AList.update (op =) o unalias_raw_param |
168 fun default_raw_params ctxt = |
165 fun default_raw_params ctxt = |
169 let val thy = ProofContext.theory_of ctxt in |
166 let val thy = ProofContext.theory_of ctxt in |
170 Data.get thy |
167 Data.get thy |
268 (if i = 1 then "" else " " ^ string_of_int i) |
265 (if i = 1 then "" else " " ^ string_of_int i) |
269 |
266 |
270 fun hammer_away override_params subcommand opt_i relevance_override state = |
267 fun hammer_away override_params subcommand opt_i relevance_override state = |
271 let |
268 let |
272 val ctxt = Proof.context_of state |
269 val ctxt = Proof.context_of state |
273 val thy = Proof.theory_of state |
|
274 val _ = app check_raw_param override_params |
270 val _ = app check_raw_param override_params |
275 in |
271 in |
276 if subcommand = runN then |
272 if subcommand = runN then |
277 let val i = the_default 1 opt_i in |
273 let val i = the_default 1 opt_i in |
278 run_sledgehammer (get_params false ctxt override_params) false i |
274 run_sledgehammer (get_params false ctxt override_params) false i |
284 run_minimize (get_params false ctxt override_params) (the_default 1 opt_i) |
280 run_minimize (get_params false ctxt override_params) (the_default 1 opt_i) |
285 (#add relevance_override) state |
281 (#add relevance_override) state |
286 else if subcommand = messagesN then |
282 else if subcommand = messagesN then |
287 messages opt_i |
283 messages opt_i |
288 else if subcommand = available_proversN then |
284 else if subcommand = available_proversN then |
289 available_provers thy |
285 available_provers ctxt |
290 else if subcommand = running_proversN then |
286 else if subcommand = running_proversN then |
291 running_provers () |
287 running_provers () |
292 else if subcommand = kill_proversN then |
288 else if subcommand = kill_proversN then |
293 kill_provers () |
289 kill_provers () |
294 else if subcommand = refresh_tptpN then |
290 else if subcommand = refresh_tptpN then |