416 change_data id (inc_metis_lemmas m (length named_thms)); |
416 change_data id (inc_metis_lemmas m (length named_thms)); |
417 change_data id (inc_metis_time m t); |
417 change_data id (inc_metis_time m t); |
418 change_data id (inc_metis_posns m pos); |
418 change_data id (inc_metis_posns m pos); |
419 if name = "proof" then change_data id (inc_metis_proofs m) else (); |
419 if name = "proof" then change_data id (inc_metis_proofs m) else (); |
420 "succeeded (" ^ string_of_int t ^ ")") |
420 "succeeded (" ^ string_of_int t ^ ")") |
421 fun timed_metis thms = with_time (Mirabelle.cpu_time apply_metis thms) |
421 fun timed_metis thms = |
422 handle TimeLimit.TimeOut => (change_data id (inc_metis_timeout m); "timeout") |
422 (with_time (Mirabelle.cpu_time apply_metis thms), true) |
423 | ERROR msg => "error: " ^ msg |
423 handle TimeLimit.TimeOut => (change_data id (inc_metis_timeout m); |
|
424 ("timeout", false)) |
|
425 | ERROR msg => ("error: " ^ msg, false) |
424 |
426 |
425 val _ = log separator |
427 val _ = log separator |
426 val _ = change_data id (inc_metis_calls m) |
428 val _ = change_data id (inc_metis_calls m) |
427 in |
429 in |
428 maps snd named_thms |
430 maps snd named_thms |
429 |> timed_metis |
431 |> timed_metis |
430 |> log o prefix (metis_tag id) |
432 |>> log o prefix (metis_tag id) |
|
433 |> snd |
431 end |
434 end |
432 |
435 |
433 fun sledgehammer_action args id (st as {pre, name, ...}: Mirabelle.run_args) = |
436 fun sledgehammer_action args id (st as {pre, name, ...}: Mirabelle.run_args) = |
434 let val goal = Thm.major_prem_of (#goal (Proof.raw_goal pre)) (* FIXME ?? *) in |
437 let val goal = Thm.major_prem_of (#goal (Proof.raw_goal pre)) (* FIXME ?? *) in |
435 if can Logic.dest_conjunction goal orelse can Logic.dest_equals goal |
438 if can Logic.dest_conjunction goal orelse can Logic.dest_equals goal |
440 val metis_ft = AList.defined (op =) args metis_ftK |
443 val metis_ft = AList.defined (op =) args metis_ftK |
441 |
444 |
442 fun apply_metis m1 m2 = |
445 fun apply_metis m1 m2 = |
443 if metis_ft |
446 if metis_ft |
444 then |
447 then |
445 Mirabelle.app_timeout metis_tag |
448 if not (Mirabelle.catch_result metis_tag false |
446 (run_metis false m1 name (these (!named_thms))) |
449 (run_metis false m1 name (these (!named_thms))) id st) |
447 (Mirabelle.catch metis_tag |
450 then |
448 (run_metis true m2 name (these (!named_thms)))) id st |
451 (Mirabelle.catch_result metis_tag false |
|
452 (run_metis true m2 name (these (!named_thms))) id st; ()) |
|
453 else () |
449 else |
454 else |
450 Mirabelle.catch metis_tag |
455 (Mirabelle.catch_result metis_tag false |
451 (run_metis false m1 name (these (!named_thms))) id st |
456 (run_metis false m1 name (these (!named_thms))) id st; ()) |
452 in |
457 in |
453 change_data id (set_mini minimize); |
458 change_data id (set_mini minimize); |
454 Mirabelle.catch sh_tag (run_sledgehammer args named_thms) id st; |
459 Mirabelle.catch sh_tag (run_sledgehammer args named_thms) id st; |
455 if is_some (!named_thms) |
460 if is_some (!named_thms) |
456 then |
461 then |