src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML
changeset 34052 b2e6245fb3da
parent 34035 08d34921b7dd
child 35592 768d17f54125
equal deleted inserted replaced
34051:1a82e2e29d67 34052:b2e6245fb3da
   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