9 val prover_timeoutK = "prover_timeout" |
9 val prover_timeoutK = "prover_timeout" |
10 val keepK = "keep" |
10 val keepK = "keep" |
11 val type_encK = "type_enc" |
11 val type_encK = "type_enc" |
12 val soundK = "sound" |
12 val soundK = "sound" |
13 val slicingK = "slicing" |
13 val slicingK = "slicing" |
14 val lambda_translationK = "lambda_translation" |
14 val lambda_transK = "lambda_trans" |
15 val e_weight_methodK = "e_weight_method" |
15 val e_weight_methodK = "e_weight_method" |
16 val force_sosK = "force_sos" |
16 val force_sosK = "force_sos" |
17 val max_relevantK = "max_relevant" |
17 val max_relevantK = "max_relevant" |
18 val max_callsK = "max_calls" |
18 val max_callsK = "max_calls" |
19 val minimizeK = "minimize" |
19 val minimizeK = "minimize" |
353 datatype sh_result = |
353 datatype sh_result = |
354 SH_OK of int * int * (string * locality) list | |
354 SH_OK of int * int * (string * locality) list | |
355 SH_FAIL of int * int | |
355 SH_FAIL of int * int | |
356 SH_ERROR |
356 SH_ERROR |
357 |
357 |
358 fun run_sh prover_name prover type_enc sound max_relevant slicing |
358 fun run_sh prover_name prover type_enc sound max_relevant slicing lambda_trans |
359 lambda_translation e_weight_method force_sos hard_timeout timeout dir |
359 e_weight_method force_sos hard_timeout timeout dir pos st = |
360 pos st = |
|
361 let |
360 let |
362 val {context = ctxt, facts = chained_ths, goal} = Proof.goal st |
361 val {context = ctxt, facts = chained_ths, goal} = Proof.goal st |
363 val i = 1 |
362 val i = 1 |
364 fun set_file_name (SOME dir) = |
363 fun set_file_name (SOME dir) = |
365 Config.put Sledgehammer_Provers.dest_dir dir |
364 Config.put Sledgehammer_Provers.dest_dir dir |
371 | set_file_name NONE = I |
370 | set_file_name NONE = I |
372 val st' = |
371 val st' = |
373 st |> Proof.map_context |
372 st |> Proof.map_context |
374 (set_file_name dir |
373 (set_file_name dir |
375 #> (Option.map (Config.put |
374 #> (Option.map (Config.put |
376 Sledgehammer_Provers.atp_lambda_translation) |
375 Sledgehammer_Provers.atp_lambda_trans) |
377 lambda_translation |> the_default I) |
376 lambda_trans |> the_default I) |
378 #> (Option.map (Config.put ATP_Systems.e_weight_method) |
377 #> (Option.map (Config.put ATP_Systems.e_weight_method) |
379 e_weight_method |> the_default I) |
378 e_weight_method |> the_default I) |
380 #> (Option.map (Config.put ATP_Systems.force_sos) |
379 #> (Option.map (Config.put ATP_Systems.force_sos) |
381 force_sos |> the_default I)) |
380 force_sos |> the_default I)) |
382 val params as {relevance_thresholds, max_relevant, slicing, ...} = |
381 val params as {relevance_thresholds, max_relevant, slicing, ...} = |
464 val (prover_name, prover) = get_prover (Proof.context_of st) args |
463 val (prover_name, prover) = get_prover (Proof.context_of st) args |
465 val type_enc = AList.lookup (op =) args type_encK |> the_default "smart" |
464 val type_enc = AList.lookup (op =) args type_encK |> the_default "smart" |
466 val sound = AList.lookup (op =) args soundK |> the_default "false" |
465 val sound = AList.lookup (op =) args soundK |> the_default "false" |
467 val max_relevant = AList.lookup (op =) args max_relevantK |> the_default "smart" |
466 val max_relevant = AList.lookup (op =) args max_relevantK |> the_default "smart" |
468 val slicing = AList.lookup (op =) args slicingK |> the_default "true" |
467 val slicing = AList.lookup (op =) args slicingK |> the_default "true" |
469 val lambda_translation = AList.lookup (op =) args lambda_translationK |
468 val lambda_trans = AList.lookup (op =) args lambda_transK |
470 val e_weight_method = AList.lookup (op =) args e_weight_methodK |
469 val e_weight_method = AList.lookup (op =) args e_weight_methodK |
471 val force_sos = AList.lookup (op =) args force_sosK |
470 val force_sos = AList.lookup (op =) args force_sosK |
472 |> Option.map (curry (op <>) "false") |
471 |> Option.map (curry (op <>) "false") |
473 val dir = AList.lookup (op =) args keepK |
472 val dir = AList.lookup (op =) args keepK |
474 val timeout = Mirabelle.get_int_setting args (prover_timeoutK, 30) |
473 val timeout = Mirabelle.get_int_setting args (prover_timeoutK, 30) |
475 (* always use a hard timeout, but give some slack so that the automatic |
474 (* always use a hard timeout, but give some slack so that the automatic |
476 minimizer has a chance to do its magic *) |
475 minimizer has a chance to do its magic *) |
477 val hard_timeout = SOME (2 * timeout) |
476 val hard_timeout = SOME (2 * timeout) |
478 val (msg, result) = |
477 val (msg, result) = |
479 run_sh prover_name prover type_enc sound max_relevant slicing |
478 run_sh prover_name prover type_enc sound max_relevant slicing lambda_trans |
480 lambda_translation e_weight_method force_sos hard_timeout timeout dir |
479 e_weight_method force_sos hard_timeout timeout dir pos st |
481 pos st |
|
482 in |
480 in |
483 case result of |
481 case result of |
484 SH_OK (time_isa, time_prover, names) => |
482 SH_OK (time_isa, time_prover, names) => |
485 let |
483 let |
486 fun get_thms (name, loc) = |
484 fun get_thms (name, loc) = |