renamed Sledgehammer options
authorblanchet
Wed, 18 Jul 2012 08:44:03 +0200
changeset 49308914ca0827804
parent 49307 7fcee834c7f5
child 49309 2b0c5553dc46
renamed Sledgehammer options
src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML
src/HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML
src/HOL/TPTP/mash_eval.ML
src/HOL/TPTP/sledgehammer_tactics.ML
src/HOL/Tools/Sledgehammer/sledgehammer_filter_iter.ML
src/HOL/Tools/Sledgehammer/sledgehammer_filter_mash.ML
src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
src/HOL/Tools/Sledgehammer/sledgehammer_minimize.ML
src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML
src/HOL/Tools/Sledgehammer/sledgehammer_run.ML
     1.1 --- a/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML	Wed Jul 18 08:44:03 2012 +0200
     1.2 +++ b/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML	Wed Jul 18 08:44:03 2012 +0200
     1.3 @@ -22,6 +22,7 @@
     1.4  val reconstructorK = "reconstructor" (*=NAME: how to reconstruct proofs (ie. using metis/smt)*)
     1.5  val metis_ftK = "metis_ft" (*: apply metis with fully-typed encoding to the theorems found by sledgehammer*)
     1.6  
     1.7 +val max_factsK = "max_facts" (*=NUM: max. relevant clauses to use*)
     1.8  val max_relevantK = "max_relevant" (*=NUM: max. relevant clauses to use*)
     1.9  val max_callsK = "max_calls" (*=NUM: max. no. of calls to sledgehammer*)
    1.10  val preplay_timeoutK = "preplay_timeout" (*=TIME: timeout for finding reconstructed proof*)
    1.11 @@ -53,7 +54,7 @@
    1.12  val uncurried_aliases_default = "smart"
    1.13  val type_enc_default = "smart"
    1.14  val strict_default = "false"
    1.15 -val max_relevant_default = "smart"
    1.16 +val max_facts_default = "smart"
    1.17  val slice_default = "true"
    1.18  val max_calls_default = "10000000"
    1.19  val trivial_default = "false"
    1.20 @@ -398,7 +399,7 @@
    1.21    SH_FAIL of int * int |
    1.22    SH_ERROR
    1.23  
    1.24 -fun run_sh prover_name prover type_enc strict max_relevant slice lam_trans
    1.25 +fun run_sh prover_name prover type_enc strict max_facts slice lam_trans
    1.26          uncurried_aliases e_selection_heuristic term_order force_sos
    1.27          hard_timeout timeout preplay_timeout sh_minimizeLST
    1.28          max_new_mono_instancesLST max_mono_itersLST dir pos st =
    1.29 @@ -423,23 +424,22 @@
    1.30                    term_order |> the_default I)
    1.31              #> (Option.map (Config.put ATP_Systems.force_sos)
    1.32                    force_sos |> the_default I))
    1.33 -    val params as {max_relevant, slice, ...} =
    1.34 +    val params as {max_facts, slice, ...} =
    1.35        Sledgehammer_Isar.default_params ctxt
    1.36           ([("verbose", "true"),
    1.37             ("type_enc", type_enc),
    1.38             ("strict", strict),
    1.39             ("lam_trans", lam_trans |> the_default lam_trans_default),
    1.40             ("uncurried_aliases", uncurried_aliases |> the_default uncurried_aliases_default),
    1.41 -           ("max_relevant", max_relevant),
    1.42 +           ("max_facts", max_facts),
    1.43             ("slice", slice),
    1.44             ("timeout", string_of_int timeout),
    1.45             ("preplay_timeout", preplay_timeout)]
    1.46            |> sh_minimizeLST (*don't confuse the two minimization flags*)
    1.47            |> max_new_mono_instancesLST
    1.48            |> max_mono_itersLST)
    1.49 -    val default_max_relevant =
    1.50 -      Sledgehammer_Provers.default_max_relevant_for_prover ctxt slice
    1.51 -        prover_name
    1.52 +    val default_max_facts =
    1.53 +      Sledgehammer_Provers.default_max_facts_for_prover ctxt slice prover_name
    1.54      val is_appropriate_prop =
    1.55        Sledgehammer_Provers.is_appropriate_prop_for_prover ctxt prover_name
    1.56      val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal i
    1.57 @@ -464,7 +464,7 @@
    1.58                Sledgehammer_Fact.no_fact_override chained_ths hyp_ts concl_t
    1.59            |> filter (is_appropriate_prop o prop_of o snd)
    1.60            |> Sledgehammer_Filter_MaSh.relevant_facts ctxt params prover_name
    1.61 -                 (the_default default_max_relevant max_relevant)
    1.62 +                 (the_default default_max_facts max_facts)
    1.63                   Sledgehammer_Fact.no_fact_override hyp_ts concl_t
    1.64          val problem =
    1.65            {state = st', goal = goal, subgoal = i,
    1.66 @@ -507,7 +507,12 @@
    1.67      val (prover_name, prover) = get_prover (Proof.context_of st) args
    1.68      val type_enc = AList.lookup (op =) args type_encK |> the_default type_enc_default
    1.69      val strict = AList.lookup (op =) args strictK |> the_default strict_default
    1.70 -    val max_relevant = AList.lookup (op =) args max_relevantK |> the_default max_relevant_default
    1.71 +    val max_facts =
    1.72 +      case AList.lookup (op =) args max_factsK of
    1.73 +        SOME max => max
    1.74 +      | NONE => case AList.lookup (op =) args max_relevantK of
    1.75 +                  SOME max => max
    1.76 +                | NONE => max_facts_default
    1.77      val slice = AList.lookup (op =) args sliceK |> the_default slice_default
    1.78      val lam_trans = AList.lookup (op =) args lam_transK
    1.79      val uncurried_aliases = AList.lookup (op =) args uncurried_aliasesK
    1.80 @@ -527,7 +532,7 @@
    1.81      val max_mono_itersLST = available_parameter args max_mono_itersK max_mono_itersK
    1.82      val hard_timeout = SOME (2 * timeout)
    1.83      val (msg, result) =
    1.84 -      run_sh prover_name prover type_enc strict max_relevant slice lam_trans
    1.85 +      run_sh prover_name prover type_enc strict max_facts slice lam_trans
    1.86          uncurried_aliases e_selection_heuristic term_order force_sos
    1.87          hard_timeout timeout preplay_timeout sh_minimizeLST
    1.88          max_new_mono_instancesLST max_mono_itersLST dir pos st
    1.89 @@ -611,7 +616,7 @@
    1.90  
    1.91  fun override_params prover type_enc timeout =
    1.92    [("provers", prover),
    1.93 -   ("max_relevant", "0"),
    1.94 +   ("max_facts", "0"),
    1.95     ("type_enc", type_enc),
    1.96     ("strict", "true"),
    1.97     ("slice", "false"),
     2.1 --- a/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML	Wed Jul 18 08:44:03 2012 +0200
     2.2 +++ b/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML	Wed Jul 18 08:44:03 2012 +0200
     2.3 @@ -113,11 +113,10 @@
     2.4           val {context = ctxt, facts = chained_ths, goal} = Proof.goal pre
     2.5           val prover = AList.lookup (op =) args "prover"
     2.6                        |> the_default default_prover
     2.7 -         val params as {max_relevant, slice, ...} =
     2.8 +         val params as {max_facts, slice, ...} =
     2.9             Sledgehammer_Isar.default_params ctxt args
    2.10 -         val default_max_relevant =
    2.11 -           Sledgehammer_Provers.default_max_relevant_for_prover ctxt slice
    2.12 -                                                                prover
    2.13 +         val default_max_facts =
    2.14 +           Sledgehammer_Provers.default_max_facts_for_prover ctxt slice prover
    2.15           val is_appropriate_prop =
    2.16             Sledgehammer_Provers.is_appropriate_prop_for_prover ctxt
    2.17                 default_prover
    2.18 @@ -132,7 +131,7 @@
    2.19                 Sledgehammer_Fact.no_fact_override chained_ths hyp_ts concl_t
    2.20             |> filter (is_appropriate_prop o prop_of o snd)
    2.21             |> Sledgehammer_Filter_Iter.iterative_relevant_facts ctxt params
    2.22 -                  default_prover (the_default default_max_relevant max_relevant)
    2.23 +                  default_prover (the_default default_max_facts max_facts)
    2.24                    (SOME relevance_fudge) hyp_ts concl_t
    2.25              |> map ((fn name => name ()) o fst o fst)
    2.26           val (found_facts, lost_facts) =
     3.1 --- a/src/HOL/TPTP/mash_eval.ML	Wed Jul 18 08:44:03 2012 +0200
     3.2 +++ b/src/HOL/TPTP/mash_eval.ML	Wed Jul 18 08:44:03 2012 +0200
     3.3 @@ -36,11 +36,11 @@
     3.4  val mashN = "MaSh"
     3.5  val iter_mashN = "Iter+MaSh"
     3.6  
     3.7 -val max_relevant_slack = 2
     3.8 +val max_facts_slack = 2
     3.9  
    3.10  fun evaluate_mash_suggestions ctxt params thy file_name =
    3.11    let
    3.12 -    val {provers, max_relevant, slice, type_enc, lam_trans, timeout, ...} =
    3.13 +    val {provers, max_facts, slice, type_enc, lam_trans, timeout, ...} =
    3.14        Sledgehammer_Isar.default_params ctxt []
    3.15      val prover_name = hd provers
    3.16      val path = file_name |> Path.explode
    3.17 @@ -55,7 +55,7 @@
    3.18        find_first (fn (_, th) => Thm.get_name_hint th = sugg) facts
    3.19      fun sugg_facts hyp_ts concl_t facts =
    3.20        map_filter (find_sugg facts o of_fact_name)
    3.21 -      #> take (max_relevant_slack * the max_relevant)
    3.22 +      #> take (max_facts_slack * the max_facts)
    3.23        #> Sledgehammer_Fact.maybe_instantiate_inducts ctxt hyp_ts concl_t
    3.24      fun hybrid_facts fsp =
    3.25        let
    3.26 @@ -70,7 +70,7 @@
    3.27        in
    3.28          union fact_eq fs1 fs2
    3.29          |> map (`score_of) |> sort (int_ord o pairself fst) |> map snd
    3.30 -        |> take (the max_relevant)
    3.31 +        |> take (the max_facts)
    3.32          |> map (apfst (apfst K))
    3.33        end
    3.34      fun with_index facts s = (find_index (curry (op =) s) facts + 1, s)
    3.35 @@ -84,20 +84,19 @@
    3.36                         |> sort (int_ord o pairself fst)
    3.37                         |> map index_string
    3.38                         |> space_implode " ") ^
    3.39 -           (if length facts < the max_relevant then
    3.40 +           (if length facts < the max_facts then
    3.41                " (of " ^ string_of_int (length facts) ^ ")"
    3.42              else
    3.43                "")
    3.44           else
    3.45             "Failure: " ^
    3.46 -           (facts |> take (the max_relevant)
    3.47 -                  |> tag_list 1
    3.48 +           (facts |> take (the max_facts) |> tag_list 1
    3.49                    |> map index_string
    3.50                    |> space_implode " "))
    3.51        end
    3.52      fun prove ok heading facts goal =
    3.53        let
    3.54 -        val facts = facts |> take (the max_relevant)
    3.55 +        val facts = facts |> take (the max_facts)
    3.56          val res as {outcome, ...} = run_prover ctxt params facts goal
    3.57          val _ = if is_none outcome then ok := !ok + 1 else ()
    3.58        in str_of_res heading facts res end
    3.59 @@ -115,8 +114,8 @@
    3.60          val isa_facts = sugg_facts hyp_ts concl_t facts isa_deps
    3.61          val iter_facts =
    3.62            Sledgehammer_Filter_Iter.iterative_relevant_facts ctxt params
    3.63 -              prover_name (max_relevant_slack * the max_relevant) NONE hyp_ts
    3.64 -              concl_t facts
    3.65 +              prover_name (max_facts_slack * the max_facts) NONE hyp_ts concl_t
    3.66 +              facts
    3.67          val mash_facts = sugg_facts hyp_ts concl_t facts suggs
    3.68          val iter_mash_facts = hybrid_facts (iter_facts, mash_facts)
    3.69          val iter_s = prove iter_ok iterN iter_facts goal
    3.70 @@ -139,7 +138,7 @@
    3.71                 (100.0 * Real.fromInt (!ok) / Real.fromInt n) ^ "%)"
    3.72      val inst_inducts = Config.get ctxt Sledgehammer_Fact.instantiate_inducts
    3.73      val options =
    3.74 -      [prover_name, string_of_int (the max_relevant) ^ " facts",
    3.75 +      [prover_name, string_of_int (the max_facts) ^ " facts",
    3.76         "slice" |> not slice ? prefix "dont_", the_default "smart" type_enc,
    3.77         the_default "smart" lam_trans, ATP_Util.string_from_time timeout,
    3.78         "instantiate_inducts" |> not inst_inducts ? prefix "dont_"]
     4.1 --- a/src/HOL/TPTP/sledgehammer_tactics.ML	Wed Jul 18 08:44:03 2012 +0200
     4.2 +++ b/src/HOL/TPTP/sledgehammer_tactics.ML	Wed Jul 18 08:44:03 2012 +0200
     4.3 @@ -23,20 +23,20 @@
     4.4  fun run_prover override_params fact_override i n ctxt goal =
     4.5    let
     4.6      val mode = Sledgehammer_Provers.Normal
     4.7 -    val params as {provers, max_relevant, slice, ...} =
     4.8 +    val params as {provers, max_facts, slice, ...} =
     4.9        Sledgehammer_Isar.default_params ctxt override_params
    4.10      val name = hd provers
    4.11      val prover = Sledgehammer_Provers.get_prover ctxt mode name
    4.12 -    val default_max_relevant =
    4.13 -      Sledgehammer_Provers.default_max_relevant_for_prover ctxt slice name
    4.14 +    val default_max_facts =
    4.15 +      Sledgehammer_Provers.default_max_facts_for_prover ctxt slice name
    4.16      val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal i
    4.17      val ho_atp = exists (Sledgehammer_Provers.is_ho_atp ctxt) provers
    4.18      val facts =
    4.19        Sledgehammer_Fact.nearly_all_facts ctxt ho_atp fact_override []
    4.20                                           hyp_ts concl_t
    4.21        |> Sledgehammer_Filter_MaSh.relevant_facts ctxt params name
    4.22 -             (the_default default_max_relevant max_relevant) fact_override
    4.23 -             hyp_ts concl_t
    4.24 +             (the_default default_max_facts max_facts) fact_override hyp_ts
    4.25 +             concl_t
    4.26      val problem =
    4.27        {state = Proof.init ctxt, goal = goal, subgoal = i, subgoal_count = n,
    4.28         facts = facts |> map (apfst (apfst (fn name => name ())))
     5.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_filter_iter.ML	Wed Jul 18 08:44:03 2012 +0200
     5.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_filter_iter.ML	Wed Jul 18 08:44:03 2012 +0200
     5.3 @@ -336,14 +336,14 @@
     5.4  type annotated_thm =
     5.5    (((unit -> string) * stature) * thm) * (string * ptype) list
     5.6  
     5.7 -fun take_most_relevant ctxt max_relevant remaining_max
     5.8 +fun take_most_relevant ctxt max_facts remaining_max
     5.9          ({max_imperfect, max_imperfect_exp, ...} : relevance_fudge)
    5.10          (candidates : (annotated_thm * real) list) =
    5.11    let
    5.12      val max_imperfect =
    5.13        Real.ceil (Math.pow (max_imperfect,
    5.14                      Math.pow (Real.fromInt remaining_max
    5.15 -                              / Real.fromInt max_relevant, max_imperfect_exp)))
    5.16 +                              / Real.fromInt max_facts, max_imperfect_exp)))
    5.17      val (perfect, imperfect) =
    5.18        candidates |> sort (Real.compare o swap o pairself snd)
    5.19                   |> take_prefix (fn (_, w) => w > 0.99999)
    5.20 @@ -393,7 +393,7 @@
    5.21     facts are included. *)
    5.22  val special_fact_index = 75
    5.23  
    5.24 -fun relevance_filter ctxt thres0 decay max_relevant is_built_in_const
    5.25 +fun relevance_filter ctxt thres0 decay max_facts is_built_in_const
    5.26          (fudge as {threshold_divisor, ridiculous_threshold, ...}) facts hyp_ts
    5.27          concl_t =
    5.28    let
    5.29 @@ -416,15 +416,14 @@
    5.30              (* Nothing has been added this iteration. *)
    5.31              if j = 0 andalso thres >= ridiculous_threshold then
    5.32                (* First iteration? Try again. *)
    5.33 -              iter 0 max_relevant (thres / threshold_divisor) rel_const_tab
    5.34 +              iter 0 max_facts (thres / threshold_divisor) rel_const_tab
    5.35                     hopeless hopeful
    5.36              else
    5.37                []
    5.38            | relevant candidates rejects [] =
    5.39              let
    5.40                val (accepts, more_rejects) =
    5.41 -                take_most_relevant ctxt max_relevant remaining_max fudge
    5.42 -                                   candidates
    5.43 +                take_most_relevant ctxt max_facts remaining_max fudge candidates
    5.44                val rel_const_tab' =
    5.45                  rel_const_tab
    5.46                  |> fold (add_pconst_to_table false) (maps (snd o fst) accepts)
    5.47 @@ -495,7 +494,7 @@
    5.48            val add = facts |> filter (member Thm.eq_thm_prop ths o snd)
    5.49            val (bef, after) =
    5.50              accepts |> filter_out (member Thm.eq_thm_prop ths o snd)
    5.51 -                    |> take (max_relevant - length add)
    5.52 +                    |> take (max_facts - length add)
    5.53                      |> chop special_fact_index
    5.54          in bef @ add @ after end
    5.55      fun insert_special_facts accepts =
    5.56 @@ -505,15 +504,15 @@
    5.57            |> insert_into_facts accepts
    5.58    in
    5.59      facts |> map_filter (pair_consts_fact thy is_built_in_const fudge)
    5.60 -          |> iter 0 max_relevant thres0 goal_const_tab []
    5.61 +          |> iter 0 max_facts thres0 goal_const_tab []
    5.62            |> insert_special_facts
    5.63            |> tap (fn accepts => trace_msg ctxt (fn () =>
    5.64                        "Total relevant: " ^ string_of_int (length accepts)))
    5.65    end
    5.66  
    5.67  fun iterative_relevant_facts ctxt
    5.68 -        ({relevance_thresholds = (thres0, thres1), ...} : params) prover
    5.69 -        max_relevant fudge hyp_ts concl_t facts =
    5.70 +        ({fact_thresholds = (thres0, thres1), ...} : params) prover
    5.71 +        max_facts fudge hyp_ts concl_t facts =
    5.72    let
    5.73      val thy = Proof_Context.theory_of ctxt
    5.74      val is_built_in_const =
    5.75 @@ -523,7 +522,7 @@
    5.76          SOME fudge => fudge
    5.77        | NONE => Sledgehammer_Provers.relevance_fudge_for_prover ctxt prover
    5.78      val decay = Math.pow ((1.0 - thres1) / (1.0 - thres0),
    5.79 -                          1.0 / Real.fromInt (max_relevant + 1))
    5.80 +                          1.0 / Real.fromInt (max_facts + 1))
    5.81    in
    5.82      trace_msg ctxt (fn () => "Considering " ^ string_of_int (length facts) ^
    5.83                               " facts");
    5.84 @@ -532,8 +531,8 @@
    5.85       else if thres0 > 1.0 orelse thres0 > thres1 then
    5.86         []
    5.87       else
    5.88 -       relevance_filter ctxt thres0 decay max_relevant is_built_in_const
    5.89 -           fudge facts hyp_ts
    5.90 +       relevance_filter ctxt thres0 decay max_facts is_built_in_const fudge
    5.91 +           facts hyp_ts
    5.92             (concl_t |> theory_constify fudge (Context.theory_name thy)))
    5.93    end
    5.94  
     6.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_filter_mash.ML	Wed Jul 18 08:44:03 2012 +0200
     6.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_filter_mash.ML	Wed Jul 18 08:44:03 2012 +0200
     6.3 @@ -313,7 +313,7 @@
     6.4        in File.append path s end
     6.5    in List.app do_thm ths end
     6.6  
     6.7 -fun generate_atp_dependencies ctxt (params as {provers, max_relevant, ...}) thy
     6.8 +fun generate_atp_dependencies ctxt (params as {provers, max_facts, ...}) thy
     6.9                                include_thy file_name =
    6.10    let
    6.11      val path = file_name |> Path.explode
    6.12 @@ -347,7 +347,7 @@
    6.13                  facts |> filter (fn (_, th') => thm_ord (th', th) = LESS)
    6.14                val facts =
    6.15                  facts |> iterative_relevant_facts ctxt params (hd provers)
    6.16 -                             (the max_relevant) NONE hyp_ts concl_t
    6.17 +                             (the max_facts) NONE hyp_ts concl_t
    6.18                        |> fold (add_isa_dep facts) isa_deps
    6.19                        |> map fix_name
    6.20              in
    6.21 @@ -378,11 +378,11 @@
    6.22  fun learn_proof thy t ths =
    6.23    ()
    6.24  
    6.25 -fun relevant_facts ctxt params prover max_relevant
    6.26 -        ({add, only, ...} : fact_override) hyp_ts concl_t facts =
    6.27 +fun relevant_facts ctxt params prover max_facts
    6.28 +                   ({add, only, ...} : fact_override) hyp_ts concl_t facts =
    6.29    if only then
    6.30      facts
    6.31 -  else if max_relevant <= 0 then
    6.32 +  else if max_facts <= 0 then
    6.33      []
    6.34    else
    6.35      let
    6.36 @@ -390,10 +390,11 @@
    6.37        fun prepend_facts ths accepts =
    6.38          ((facts |> filter (member Thm.eq_thm_prop ths o snd)) @
    6.39           (accepts |> filter_out (member Thm.eq_thm_prop ths o snd)))
    6.40 -        |> take max_relevant
    6.41 +        |> take max_facts
    6.42      in
    6.43 -      iterative_relevant_facts ctxt params prover max_relevant NONE
    6.44 -                               hyp_ts concl_t facts
    6.45 +      facts
    6.46 +      |> iterative_relevant_facts ctxt params prover max_facts NONE hyp_ts
    6.47 +                                  concl_t
    6.48        |> not (null add_ths) ? prepend_facts add_ths
    6.49      end
    6.50  
     7.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Wed Jul 18 08:44:03 2012 +0200
     7.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Wed Jul 18 08:44:03 2012 +0200
     7.3 @@ -82,8 +82,8 @@
     7.4     ("strict", "false"),
     7.5     ("lam_trans", "smart"),
     7.6     ("uncurried_aliases", "smart"),
     7.7 -   ("relevance_thresholds", "0.45 0.85"),
     7.8 -   ("max_relevant", "smart"),
     7.9 +   ("fact_thresholds", "0.45 0.85"),
    7.10 +   ("max_facts", "smart"),
    7.11     ("max_mono_iters", "smart"),
    7.12     ("max_new_mono_instances", "smart"),
    7.13     ("isar_proof", "false"),
    7.14 @@ -93,7 +93,8 @@
    7.15     ("preplay_timeout", "3")]
    7.16  
    7.17  val alias_params =
    7.18 -  [("prover", ("provers", [])),
    7.19 +  [("prover", ("provers", [])), (* legacy *)
    7.20 +   ("max_relevant", ("max_facts", [])), (* legacy *)
    7.21     ("dont_preplay", ("preplay_timeout", ["0"]))]
    7.22  val negated_alias_params =
    7.23    [("no_debug", "debug"),
    7.24 @@ -288,8 +289,8 @@
    7.25      val strict = mode = Auto_Try orelse lookup_bool "strict"
    7.26      val lam_trans = lookup_option lookup_string "lam_trans"
    7.27      val uncurried_aliases = lookup_option lookup_bool "uncurried_aliases"
    7.28 -    val relevance_thresholds = lookup_real_pair "relevance_thresholds"
    7.29 -    val max_relevant = lookup_option lookup_int "max_relevant"
    7.30 +    val fact_thresholds = lookup_real_pair "fact_thresholds"
    7.31 +    val max_facts = lookup_option lookup_int "max_facts"
    7.32      val max_mono_iters = lookup_option lookup_int "max_mono_iters"
    7.33      val max_new_mono_instances =
    7.34        lookup_option lookup_int "max_new_mono_instances"
    7.35 @@ -308,7 +309,7 @@
    7.36      {debug = debug, verbose = verbose, overlord = overlord, blocking = blocking,
    7.37       provers = provers, type_enc = type_enc, strict = strict,
    7.38       lam_trans = lam_trans, uncurried_aliases = uncurried_aliases,
    7.39 -     relevance_thresholds = relevance_thresholds, max_relevant = max_relevant,
    7.40 +     fact_thresholds = fact_thresholds, max_facts = max_facts,
    7.41       max_mono_iters = max_mono_iters,
    7.42       max_new_mono_instances = max_new_mono_instances,  isar_proof = isar_proof,
    7.43       isar_shrink_factor = isar_shrink_factor, slice = slice,
    7.44 @@ -405,12 +406,12 @@
    7.45  val parse_params = Scan.optional (Args.bracks (Parse.list parse_param)) []
    7.46  val parse_fact_refs =
    7.47    Scan.repeat1 (Scan.unless (Parse.name -- Args.colon) Parse_Spec.xthm)
    7.48 -val parse_relevance_chunk =
    7.49 +val parse_fact_override_chunk =
    7.50    (Args.add |-- Args.colon |-- parse_fact_refs >> add_fact_override)
    7.51    || (Args.del |-- Args.colon |-- parse_fact_refs >> del_fact_override)
    7.52    || (parse_fact_refs >> only_fact_override)
    7.53  val parse_fact_override =
    7.54 -  Scan.optional (Args.parens (Scan.repeat parse_relevance_chunk
    7.55 +  Scan.optional (Args.parens (Scan.repeat parse_fact_override_chunk
    7.56                                >> merge_fact_overrides))
    7.57                  no_fact_override
    7.58  
     8.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_minimize.ML	Wed Jul 18 08:44:03 2012 +0200
     8.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_minimize.ML	Wed Jul 18 08:44:03 2012 +0200
     8.3 @@ -68,7 +68,7 @@
     8.4        {debug = debug, verbose = verbose, overlord = overlord, blocking = true,
     8.5         provers = provers, type_enc = type_enc, strict = strict,
     8.6         lam_trans = lam_trans, uncurried_aliases = uncurried_aliases,
     8.7 -       relevance_thresholds = (1.01, 1.01), max_relevant = SOME (length facts),
     8.8 +       fact_thresholds = (1.01, 1.01), max_facts = SOME (length facts),
     8.9         max_mono_iters = max_mono_iters,
    8.10         max_new_mono_instances = max_new_mono_instances, isar_proof = isar_proof,
    8.11         isar_shrink_factor = isar_shrink_factor, slice = false,
    8.12 @@ -225,7 +225,7 @@
    8.13  
    8.14  fun adjust_reconstructor_params override_params
    8.15          ({debug, verbose, overlord, blocking, provers, type_enc, strict,
    8.16 -         lam_trans, uncurried_aliases, relevance_thresholds, max_relevant,
    8.17 +         lam_trans, uncurried_aliases, fact_thresholds, max_facts,
    8.18           max_mono_iters, max_new_mono_instances, isar_proof, isar_shrink_factor,
    8.19           slice, minimize, timeout, preplay_timeout, expect} : params) =
    8.20    let
    8.21 @@ -241,7 +241,7 @@
    8.22      {debug = debug, verbose = verbose, overlord = overlord, blocking = blocking,
    8.23       provers = provers, type_enc = type_enc, strict = strict,
    8.24       lam_trans = lam_trans, uncurried_aliases = uncurried_aliases,
    8.25 -     max_relevant = max_relevant, relevance_thresholds = relevance_thresholds,
    8.26 +     max_facts = max_facts, fact_thresholds = fact_thresholds,
    8.27       max_mono_iters = max_mono_iters,
    8.28       max_new_mono_instances = max_new_mono_instances, isar_proof = isar_proof,
    8.29       isar_shrink_factor = isar_shrink_factor, slice = slice,
    8.30 @@ -304,8 +304,8 @@
    8.31        case used_facts of
    8.32          SOME used_facts =>
    8.33          (if debug andalso not (null used_facts) then
    8.34 -           facts ~~ (0 upto length facts - 1)
    8.35 -           |> map (fn (fact, j) => fact |> untranslated_fact |> apsnd (K j))
    8.36 +           tag_list 1 facts
    8.37 +           |> map (fn (j, fact) => fact |> untranslated_fact |> apsnd (K j))
    8.38             |> filter_used_facts used_facts
    8.39             |> map (fn ((name, _), j) => name ^ "@" ^ string_of_int j)
    8.40             |> commas
     9.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Wed Jul 18 08:44:03 2012 +0200
     9.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_provers.ML	Wed Jul 18 08:44:03 2012 +0200
     9.3 @@ -27,8 +27,8 @@
     9.4       strict: bool,
     9.5       lam_trans: string option,
     9.6       uncurried_aliases: bool option,
     9.7 -     relevance_thresholds: real * real,
     9.8 -     max_relevant: int option,
     9.9 +     fact_thresholds: real * real,
    9.10 +     max_facts: int option,
    9.11       max_mono_iters: int option,
    9.12       max_new_mono_instances: int option,
    9.13       isar_proof: bool,
    9.14 @@ -110,7 +110,7 @@
    9.15    val is_unit_equational_atp : Proof.context -> string -> bool
    9.16    val is_prover_supported : Proof.context -> string -> bool
    9.17    val is_prover_installed : Proof.context -> string -> bool
    9.18 -  val default_max_relevant_for_prover : Proof.context -> bool -> string -> int
    9.19 +  val default_max_facts_for_prover : Proof.context -> bool -> string -> int
    9.20    val is_unit_equality : term -> bool
    9.21    val is_appropriate_prop_for_prover : Proof.context -> string -> term -> bool
    9.22    val is_built_in_const_for_prover :
    9.23 @@ -188,12 +188,12 @@
    9.24  fun get_slices slice slices =
    9.25    (0 upto length slices - 1) ~~ slices |> not slice ? (List.last #> single)
    9.26  
    9.27 -val reconstructor_default_max_relevant = 20
    9.28 +val reconstructor_default_max_facts = 20
    9.29  
    9.30 -fun default_max_relevant_for_prover ctxt slice name =
    9.31 +fun default_max_facts_for_prover ctxt slice name =
    9.32    let val thy = Proof_Context.theory_of ctxt in
    9.33      if is_reconstructor name then
    9.34 -      reconstructor_default_max_relevant
    9.35 +      reconstructor_default_max_facts
    9.36      else if is_atp thy name then
    9.37        fold (Integer.max o #1 o fst o snd o snd o snd)
    9.38             (get_slices slice (#best_slices (get_atp thy name ()) ctxt)) 0
    9.39 @@ -314,8 +314,8 @@
    9.40     strict: bool,
    9.41     lam_trans: string option,
    9.42     uncurried_aliases: bool option,
    9.43 -   relevance_thresholds: real * real,
    9.44 -   max_relevant: int option,
    9.45 +   fact_thresholds: real * real,
    9.46 +   max_facts: int option,
    9.47     max_mono_iters: int option,
    9.48     max_new_mono_instances: int option,
    9.49     isar_proof: bool,
    9.50 @@ -629,7 +629,7 @@
    9.51            prem_role, best_slices, best_max_mono_iters,
    9.52            best_max_new_mono_instances, ...} : atp_config)
    9.53          (params as {debug, verbose, overlord, type_enc, strict, lam_trans,
    9.54 -                    uncurried_aliases, max_relevant, max_mono_iters,
    9.55 +                    uncurried_aliases, max_facts, max_mono_iters,
    9.56                      max_new_mono_instances, isar_proof, isar_shrink_factor,
    9.57                      slice, timeout, preplay_timeout, ...})
    9.58          minimize_command
    9.59 @@ -711,13 +711,12 @@
    9.60                end
    9.61              fun run_slice time_left (cache_key, cache_value)
    9.62                      (slice, (time_frac, (complete,
    9.63 -                        (key as (best_max_relevant, format, best_type_enc,
    9.64 +                        (key as (best_max_facts, format, best_type_enc,
    9.65                                   best_lam_trans, best_uncurried_aliases),
    9.66                                   extra)))) =
    9.67                let
    9.68                  val num_facts =
    9.69 -                  length facts |> is_none max_relevant
    9.70 -                                  ? Integer.min best_max_relevant
    9.71 +                  length facts |> is_none max_facts ? Integer.min best_max_facts
    9.72                  val soundness = if strict then Strict else Non_Strict
    9.73                  val type_enc =
    9.74                    type_enc |> choose_type_enc soundness best_type_enc format
    10.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_run.ML	Wed Jul 18 08:44:03 2012 +0200
    10.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_run.ML	Wed Jul 18 08:44:03 2012 +0200
    10.3 @@ -62,7 +62,7 @@
    10.4     (if blocking then "."
    10.5      else "\n" ^ Syntax.string_of_term ctxt (Thm.term_of (Thm.cprem_of goal i))))
    10.6  
    10.7 -fun launch_prover (params as {debug, verbose, blocking, max_relevant, slice,
    10.8 +fun launch_prover (params as {debug, verbose, blocking, max_facts, slice,
    10.9                                timeout, expect, ...})
   10.10          mode minimize_command only {state, goal, subgoal, subgoal_count, facts}
   10.11          name =
   10.12 @@ -71,10 +71,9 @@
   10.13      val hard_timeout = Time.+ (timeout, timeout)
   10.14      val birth_time = Time.now ()
   10.15      val death_time = Time.+ (birth_time, hard_timeout)
   10.16 -    val max_relevant =
   10.17 -      max_relevant
   10.18 -      |> the_default (default_max_relevant_for_prover ctxt slice name)
   10.19 -    val num_facts = length facts |> not only ? Integer.min max_relevant
   10.20 +    val max_facts =
   10.21 +      max_facts |> the_default (default_max_facts_for_prover ctxt slice name)
   10.22 +    val num_facts = length facts |> not only ? Integer.min max_facts
   10.23      fun desc () =
   10.24        prover_description ctxt params name num_facts subgoal subgoal_count goal
   10.25      val problem =
   10.26 @@ -153,10 +152,10 @@
   10.27    ctxt |> select_smt_solver name
   10.28         |> SMT_Config.solver_class_of |> SMT_Utils.string_of_class
   10.29  
   10.30 -val auto_try_max_relevant_divisor = 2 (* FUDGE *)
   10.31 +val auto_try_max_facts_divisor = 2 (* FUDGE *)
   10.32  
   10.33 -fun run_sledgehammer (params as {debug, verbose, blocking, provers,
   10.34 -                                 max_relevant, slice, ...})
   10.35 +fun run_sledgehammer (params as {debug, verbose, blocking, provers, max_facts,
   10.36 +                                 slice, ...})
   10.37          mode i (fact_override as {only, ...}) minimize_command state =
   10.38    if null provers then
   10.39      error "No prover is set."
   10.40 @@ -207,22 +206,20 @@
   10.41          end
   10.42        fun get_facts label is_appropriate_prop provers =
   10.43          let
   10.44 -          val max_max_relevant =
   10.45 -            case max_relevant of
   10.46 +          val max_max_facts =
   10.47 +            case max_facts of
   10.48                SOME n => n
   10.49              | NONE =>
   10.50 -              0 |> fold (Integer.max
   10.51 -                         o default_max_relevant_for_prover ctxt slice)
   10.52 +              0 |> fold (Integer.max o default_max_facts_for_prover ctxt slice)
   10.53                          provers
   10.54 -                |> mode = Auto_Try
   10.55 -                   ? (fn n => n div auto_try_max_relevant_divisor)
   10.56 +                |> mode = Auto_Try ? (fn n => n div auto_try_max_facts_divisor)
   10.57          in
   10.58            facts
   10.59            |> (case is_appropriate_prop of
   10.60                  SOME is_app => filter (is_app o prop_of o snd)
   10.61                | NONE => I)
   10.62 -          |> relevant_facts ctxt params (hd provers) max_max_relevant
   10.63 -                            fact_override hyp_ts concl_t
   10.64 +          |> relevant_facts ctxt params (hd provers) max_max_facts fact_override
   10.65 +                            hyp_ts concl_t
   10.66            |> map (apfst (apfst (fn name => name ())))
   10.67            |> tap (fn facts =>
   10.68                       if debug then