src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 36281 dbbf4d5d584d
parent 36235 61159615a0c5
child 36290 c29283184c7a
equal deleted inserted replaced
36268:65aabc2c89ae 36281:dbbf4d5d584d
    65    ("theory_irrelevant", "theory_relevant"),
    65    ("theory_irrelevant", "theory_relevant"),
    66    ("first_order", "higher_order"),
    66    ("first_order", "higher_order"),
    67    ("dont_follow_defs", "follow_defs"),
    67    ("dont_follow_defs", "follow_defs"),
    68    ("metis_proof", "isar_proof"),
    68    ("metis_proof", "isar_proof"),
    69    ("no_sorts", "sorts")]
    69    ("no_sorts", "sorts")]
       
    70 
       
    71 val params_for_minimize =
       
    72   ["full_types", "explicit_apply", "higher_order", "isar_proof", "modulus",
       
    73    "sorts", "minimize_timeout"]
    70 
    74 
    71 val property_dependent_params = ["atps", "full_types", "timeout"]
    75 val property_dependent_params = ["atps", "full_types", "timeout"]
    72 
    76 
    73 fun is_known_raw_param s =
    77 fun is_known_raw_param s =
    74   AList.defined (op =) default_default_params s orelse
    78   AList.defined (op =) default_default_params s orelse
   217 val running_atpsN = "running_atps"
   221 val running_atpsN = "running_atps"
   218 val kill_atpsN = "kill_atps"
   222 val kill_atpsN = "kill_atps"
   219 val refresh_tptpN = "refresh_tptp"
   223 val refresh_tptpN = "refresh_tptp"
   220 val helpN = "help"
   224 val helpN = "help"
   221 
   225 
   222 
       
   223 fun minimizize_raw_param_name "timeout" = "minimize_timeout"
   226 fun minimizize_raw_param_name "timeout" = "minimize_timeout"
   224   | minimizize_raw_param_name name = name
   227   | minimizize_raw_param_name name = name
       
   228 
       
   229 val is_raw_param_relevant_for_minimize =
       
   230   member (op =) params_for_minimize o fst o unalias_raw_param
       
   231 fun string_for_raw_param (key, values) =
       
   232   key ^ (case space_implode " " values of
       
   233            "" => ""
       
   234          | value => " = " ^ value)
       
   235 
       
   236 fun minimize_command override_params i atp_name facts =
       
   237   "sledgehammer minimize [atp = " ^ atp_name ^
       
   238   (override_params |> filter is_raw_param_relevant_for_minimize
       
   239                    |> implode o map (prefix ", " o string_for_raw_param)) ^
       
   240   "] (" ^ space_implode " " facts ^ ")" ^
       
   241   (if i = 1 then "" else " " ^ string_of_int i)
   225 
   242 
   226 fun hammer_away override_params subcommand opt_i relevance_override state =
   243 fun hammer_away override_params subcommand opt_i relevance_override state =
   227   let
   244   let
   228     val thy = Proof.theory_of state
   245     val thy = Proof.theory_of state
   229     val _ = List.app check_raw_param override_params
   246     val _ = List.app check_raw_param override_params
   230   in
   247   in
   231     if subcommand = runN then
   248     if subcommand = runN then
   232       sledgehammer (get_params thy override_params) (the_default 1 opt_i)
   249       let val i = the_default 1 opt_i in
   233                    relevance_override state
   250         sledgehammer (get_params thy override_params) i relevance_override
       
   251                      (minimize_command override_params i) state
       
   252       end
   234     else if subcommand = minimizeN then
   253     else if subcommand = minimizeN then
   235       minimize (map (apfst minimizize_raw_param_name) override_params) []
   254       minimize (map (apfst minimizize_raw_param_name) override_params) []
   236                (the_default 1 opt_i) (#add relevance_override) state
   255                (the_default 1 opt_i) (#add relevance_override) state
   237     else if subcommand = messagesN then
   256     else if subcommand = messagesN then
   238       messages opt_i
   257       messages opt_i