src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML
changeset 32523 ba397aa0ff5d
parent 32521 f20cc66b2c74
child 32525 ea322e847633
equal deleted inserted replaced
32522:1b70db55c811 32523:ba397aa0ff5d
   147 fun run_sh prover_name timeout st _ =
   147 fun run_sh prover_name timeout st _ =
   148   let
   148   let
   149     val prover = the (AtpManager.get_prover prover_name (Proof.theory_of st))
   149     val prover = the (AtpManager.get_prover prover_name (Proof.theory_of st))
   150     val atp_timeout = AtpManager.get_timeout () 
   150     val atp_timeout = AtpManager.get_timeout () 
   151     val atp = prover atp_timeout NONE NONE prover_name 1
   151     val atp = prover atp_timeout NONE NONE prover_name 1
   152     val ((success, (message, thm_names), time, _, _, _), time') =
   152     val ((success, (message, thm_names), atp_time, _, _, _), sh_time) =
   153       TimeLimit.timeLimit timeout (Mirabelle.cpu_time atp) (Proof.get_goal st)
   153       TimeLimit.timeLimit timeout (Mirabelle.cpu_time atp) (Proof.get_goal st)
   154   in
   154   in
   155     if success then (message, SOME (time + time', thm_names))
   155     if success then (message, SOME (atp_time, sh_time, thm_names))
   156     else (message, NONE)
   156     else (message, NONE)
   157   end
   157   end
   158   handle ResHolClause.TOO_TRIVIAL => ("trivial", SOME (0, []))
   158   handle ResHolClause.TOO_TRIVIAL => ("trivial", SOME (0, 0, []))
   159        | TimeLimit.TimeOut => ("timeout", NONE)
   159        | TimeLimit.TimeOut => ("timeout", NONE)
   160        | ERROR msg => ("error: " ^ msg, NONE)
   160        | ERROR msg => ("error: " ^ msg, NONE)
   161 
   161 
   162 in
   162 in
   163 
   163 
   168       AList.lookup (op =) args proverK
   168       AList.lookup (op =) args proverK
   169       |> the_default (hd (space_explode " " (AtpManager.get_atps ())))
   169       |> the_default (hd (space_explode " " (AtpManager.get_atps ())))
   170     val dir = AList.lookup (op =) args keepK
   170     val dir = AList.lookup (op =) args keepK
   171     val (msg, result) =
   171     val (msg, result) =
   172       safe init_sh done_sh (run_sh prover_name timeout st) dir
   172       safe init_sh done_sh (run_sh prover_name timeout st) dir
   173     val _ =
   173   in
   174       if is_some result
   174     (case result of
   175       then
   175       SOME (atp_time, sh_time, names) =>
   176         let
   176         let
   177           val time = fst (the result)
       
   178           val _ = change_data id inc_sh_success
   177           val _ = change_data id inc_sh_success
   179           val _ = change_data id (inc_sh_time time)
   178           val _ = change_data id (inc_sh_time (atp_time + sh_time))
       
   179           val _ = change thm_names (K (SOME names))
   180         in
   180         in
   181           log (sh_tag id ^ "succeeded (" ^ string_of_int time ^ ") [" ^
   181           log (sh_tag id ^ "succeeded (" ^ string_of_int atp_time ^ "+" ^
   182             prover_name ^ "]:\n" ^ msg)
   182             string_of_int sh_time ^ ") [" ^ prover_name ^ "]:\n" ^ msg)
   183         end
   183         end
   184       else log (sh_tag id ^ "failed: " ^ msg)
   184     | NONE => log (sh_tag id ^ "failed: " ^ msg))
   185   in change thm_names (K (Option.map snd result)) end
   185   end
   186 
   186 
   187 end
   187 end
   188 
   188 
   189 
   189 
   190 local
   190 local