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 |