src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 55264 43473497fb65
parent 55263 4d63fffcde8d
child 55266 d9d31354834e
equal deleted inserted replaced
55263:4d63fffcde8d 55264:43473497fb65
   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