133 goal) = try isar_params () |
133 goal) = try isar_params () |
134 |
134 |
135 val metislike_methods = insert (op =) (Metis_Method alt_metis_args) metislike_methods0 |
135 val metislike_methods = insert (op =) (Metis_Method alt_metis_args) metislike_methods0 |
136 |
136 |
137 val (params, _, concl_t) = strip_subgoal goal subgoal ctxt |
137 val (params, _, concl_t) = strip_subgoal goal subgoal ctxt |
138 val (_, ctxt) = |
138 val fixes = map (fn (s, T) => (Binding.name s, SOME T, NoSyn)) params |
139 params |
139 val ctxt = ctxt |> Variable.set_body false |> Proof_Context.add_fixes fixes |> snd |
140 |> map (fn (s, T) => (Binding.name s, SOME T, NoSyn)) |
|
141 |> (fn fixes => ctxt |> Variable.set_body false |> Proof_Context.add_fixes fixes) |
|
142 |
140 |
143 val do_preplay = preplay_timeout <> Time.zeroTime |
141 val do_preplay = preplay_timeout <> Time.zeroTime |
144 val try0_isar = try0_isar andalso do_preplay |
142 val try0_isar = try0_isar andalso do_preplay |
145 val compress_isar = if isar_proofs = NONE andalso do_preplay then 1000.0 else compress_isar |
143 val compress_isar = if isar_proofs = NONE andalso do_preplay then 1000.0 else compress_isar |
146 |
144 |
281 |> trace ? tap (tracing o prefix "Direct proof: " o string_of_direct_proof) |
279 |> trace ? tap (tracing o prefix "Direct proof: " o string_of_direct_proof) |
282 |> isar_proof true params assms lems |
280 |> isar_proof true params assms lems |
283 |> postprocess_isar_proof_remove_unreferenced_steps I |
281 |> postprocess_isar_proof_remove_unreferenced_steps I |
284 |> relabel_isar_proof_canonically |
282 |> relabel_isar_proof_canonically |
285 |
283 |
286 val preplay_ctxt = ctxt |
284 val ctxt = ctxt |
287 |> enrich_context_with_local_facts canonical_isar_proof |
285 |> enrich_context_with_local_facts canonical_isar_proof |
288 |> silence_reconstructors debug |
286 |> silence_reconstructors debug |
289 |
287 |
290 val preplay_data = Unsynchronized.ref Canonical_Label_Tab.empty |
288 val preplay_data = Unsynchronized.ref Canonical_Label_Tab.empty |
291 |
289 |
292 fun init_preplay_outcomes (step as Prove (_, _, l, _, _, (_, meths))) = |
290 val _ = fold_isar_steps (fn meth => |
293 set_preplay_outcomes_of_isar_step preplay_data l (map (fn meth => (meth, |
291 K (set_preplay_outcomes_of_isar_step ctxt preplay_timeout preplay_data meth [])) |
294 Lazy.lazy (fn () => preplay_isar_step preplay_ctxt preplay_timeout meth step))) |
|
295 meths) |
|
296 | init_preplay_outcomes _ = () |
|
297 |
|
298 val _ = fold_isar_steps (K o init_preplay_outcomes) |
|
299 (steps_of_isar_proof canonical_isar_proof) () |
292 (steps_of_isar_proof canonical_isar_proof) () |
300 |
293 |
301 fun str_of_preplay_outcome outcome = |
294 fun str_of_preplay_outcome outcome = |
302 if Lazy.is_finished outcome then string_of_play_outcome (Lazy.force outcome) else "?" |
295 if Lazy.is_finished outcome then string_of_play_outcome (Lazy.force outcome) else "?" |
303 |
296 |
314 () |
307 () |
315 |
308 |
316 val (play_outcome, isar_proof) = |
309 val (play_outcome, isar_proof) = |
317 canonical_isar_proof |
310 canonical_isar_proof |
318 |> tap (trace_isar_proof "Original") |
311 |> tap (trace_isar_proof "Original") |
319 |> compress_isar_proof preplay_ctxt compress_isar preplay_data |
312 |> compress_isar_proof ctxt compress_isar preplay_data |
320 |> tap (trace_isar_proof "Compressed") |
313 |> tap (trace_isar_proof "Compressed") |
321 |> try0_isar ? try0_isar_proof preplay_ctxt preplay_timeout preplay_data |
314 |> try0_isar ? try0_isar_proof ctxt preplay_timeout preplay_data |
322 |> tap (trace_isar_proof "Tried0") |
315 |> tap (trace_isar_proof "Tried0") |
323 |> postprocess_isar_proof_remove_unreferenced_steps |
316 |> postprocess_isar_proof_remove_unreferenced_steps |
324 (try0_isar ? minimize_isar_step_dependencies preplay_ctxt preplay_data) |
317 (try0_isar ? minimize_isar_step_dependencies ctxt preplay_data) |
325 |> tap (trace_isar_proof "Minimized") |
318 |> tap (trace_isar_proof "Minimized") |
326 |> `(preplay_outcome_of_isar_proof (!preplay_data)) |
319 |> `(preplay_outcome_of_isar_proof (!preplay_data)) |
327 ||> chain_isar_proof |
320 ||> chain_isar_proof |
328 ||> kill_useless_labels_in_isar_proof |
321 ||> kill_useless_labels_in_isar_proof |
329 ||> relabel_isar_proof_finally |
322 ||> relabel_isar_proof_finally |