use the proper prover name, e.g. metis_full_types, not metis (full_types), for minimizing
authorblanchet
Tue, 07 Jun 2011 11:04:17 +0200
changeset 43233 2749c357f865
parent 43232 bd4d26327633
child 43234 9d717505595f
use the proper prover name, e.g. metis_full_types, not metis (full_types), for minimizing
src/HOL/Tools/ATP/atp_reconstruct.ML
src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML
src/HOL/Tools/Sledgehammer/sledgehammer_run.ML
--- a/src/HOL/Tools/ATP/atp_reconstruct.ML	Tue Jun 07 10:46:09 2011 +0200
+++ b/src/HOL/Tools/ATP/atp_reconstruct.ML	Tue Jun 07 11:04:17 2011 +0200
@@ -42,7 +42,6 @@
     Proof.context -> type_sys -> int list list -> int
     -> (string * locality) list vector -> 'a proof -> string list option
   val uses_typed_helpers : int list -> 'a proof -> bool
-  val reconstructor_name : reconstructor -> string
   val one_line_proof_text : one_line_params -> string
   val make_tvar : string -> typ
   val make_tfree : Proof.context -> string -> typ
@@ -254,10 +253,10 @@
 (** Soft-core proof reconstruction: Metis one-liner **)
 
 (* unfortunate leaking abstraction *)
-fun reconstructor_name Metis = "metis"
-  | reconstructor_name Metis_Full_Types = "metis (full_types)"
-  | reconstructor_name Metis_No_Types = "metis (no_types)"
-  | reconstructor_name (SMT _) = "smt"
+fun name_of_reconstructor Metis = "metis"
+  | name_of_reconstructor Metis_Full_Types = "metis (full_types)"
+  | name_of_reconstructor Metis_No_Types = "metis (no_types)"
+  | name_of_reconstructor (SMT _) = "smt"
 
 fun reconstructor_settings (SMT settings) = settings
   | reconstructor_settings _ = ""
@@ -283,7 +282,7 @@
 fun reconstructor_command reconstructor i n (ls, ss) =
   using_labels ls ^
   apply_on_subgoal (reconstructor_settings reconstructor) i n ^
-  command_call (reconstructor_name reconstructor) ss
+  command_call (name_of_reconstructor reconstructor) ss
 fun minimize_line _ [] = ""
   | minimize_line minimize_command ss =
     case minimize_command ss of
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Tue Jun 07 10:46:09 2011 +0200
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Tue Jun 07 11:04:17 2011 +0200
@@ -10,10 +10,11 @@
 sig
   type failure = ATP_Proof.failure
   type locality = ATP_Translate.locality
-  type relevance_fudge = Sledgehammer_Filter.relevance_fudge
   type type_sys = ATP_Translate.type_sys
+  type reconstructor = ATP_Reconstruct.reconstructor
   type play = ATP_Reconstruct.play
   type minimize_command = ATP_Reconstruct.minimize_command
+  type relevance_fudge = Sledgehammer_Filter.relevance_fudge
 
   datatype mode = Auto_Try | Try | Normal | Minimize
 
@@ -79,6 +80,7 @@
   val smt_slice_min_secs : int Config.T
   val das_tool : string
   val select_smt_solver : string -> Proof.context -> Proof.context
+  val prover_name_for_reconstructor : reconstructor -> string option
   val is_metis_prover : string -> bool
   val is_atp : theory -> string -> bool
   val is_smt_prover : Proof.context -> string -> bool
@@ -137,13 +139,15 @@
    (metis_full_typesN, Metis_Full_Types),
    (metis_no_typesN, Metis_No_Types)]
 
+val prover_name_for_reconstructor =
+  AList.find (op =) metis_prover_infos #> try hd
+
 val metis_reconstructors = map snd metis_prover_infos
 
 val is_metis_prover = AList.defined (op =) metis_prover_infos
 val is_atp = member (op =) o supported_atps
 
-val select_smt_solver =
-  Context.proof_map o SMT_Config.select_solver
+val select_smt_solver = Context.proof_map o SMT_Config.select_solver
 
 fun is_smt_prover ctxt name =
   member (op =) (SMT_Solver.available_solvers_of ctxt) name
@@ -531,9 +535,7 @@
   (case preplay of
      Played (reconstructor, time) =>
      if Time.<= (time, metis_minimize_max_time) then
-       case AList.find (op =) metis_prover_infos reconstructor of
-         metis_name :: _ => metis_name
-       | [] => name
+       prover_name_for_reconstructor reconstructor |> the_default name
      else
        name
    | _ => name)
@@ -875,14 +877,14 @@
   let
     val max_slices = if slicing then Config.get ctxt smt_max_slices else 1
     val repair_context =
-          select_smt_solver name
-          #> (if overlord then
-                Config.put SMT_Config.debug_files
-                           (overlord_file_location_for_prover name
-                            |> (fn (path, name) => path ^ "/" ^ name))
-              else
-                I)
-          #> Config.put SMT_Config.infer_triggers (Config.get ctxt smt_triggers)
+      select_smt_solver name
+      #> (if overlord then
+            Config.put SMT_Config.debug_files
+                       (overlord_file_location_for_prover name
+                        |> (fn (path, name) => path ^ "/" ^ name))
+          else
+            I)
+      #> Config.put SMT_Config.infer_triggers (Config.get ctxt smt_triggers)
     val state = state |> Proof.map_context repair_context
     fun do_slice timeout slice outcome0 time_so_far facts =
       let
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_run.ML	Tue Jun 07 10:46:09 2011 +0200
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_run.ML	Tue Jun 07 11:04:17 2011 +0200
@@ -102,7 +102,8 @@
                   (case preplay of
                      Played (reconstructor, timeout) =>
                      if can_min_fast_enough (Time.toMilliseconds timeout) then
-                       (true, reconstructor_name reconstructor)
+                       (true, prover_name_for_reconstructor reconstructor
+                              |> the_default name)
                      else
                        (prover_fast_enough, name)
                    | _ => (prover_fast_enough, name),