src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 45591 f3a8c19708c8
parent 45515 5d6a11e166cf
child 45639 a7bc1bdb8bb4
     1.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Mon Sep 05 14:17:44 2011 +0200
     1.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Mon Sep 05 14:42:31 2011 +0200
     1.3 @@ -124,18 +124,6 @@
     1.4      ss as _ :: _ => forall (is_prover_supported ctxt) ss
     1.5    | _ => false
     1.6  
     1.7 -(* "provers =" and "type_enc =" can be left out. The latter is a secret
     1.8 -   feature. *)
     1.9 -fun check_and_repair_raw_param ctxt (name, value) =
    1.10 -  if is_known_raw_param name then
    1.11 -    (name, value)
    1.12 -  else if is_prover_list ctxt name andalso null value then
    1.13 -    ("provers", [name])
    1.14 -  else if can (type_enc_from_string Sound) name andalso null value then
    1.15 -    ("type_enc", [name])
    1.16 -  else
    1.17 -    error ("Unknown parameter: " ^ quote name ^ ".")
    1.18 -
    1.19  fun unalias_raw_param (name, value) =
    1.20    case AList.lookup (op =) alias_params name of
    1.21      SOME name' => (name', value)
    1.22 @@ -148,6 +136,21 @@
    1.23                              | _ => value)
    1.24      | NONE => (name, value)
    1.25  
    1.26 +(* "provers =" and "type_enc =" can be left out. The latter is a secret
    1.27 +   feature. *)
    1.28 +fun normalize_raw_param ctxt =
    1.29 +  unalias_raw_param
    1.30 +  #> (fn (name, value) =>
    1.31 +         if is_known_raw_param name then
    1.32 +           (name, value)
    1.33 +         else if is_prover_list ctxt name andalso null value then
    1.34 +           ("provers", [name])
    1.35 +         else if can (type_enc_from_string Sound) name andalso null value then
    1.36 +           ("type_enc", [name])
    1.37 +         else
    1.38 +           error ("Unknown parameter: " ^ quote name ^ "."))
    1.39 +
    1.40 +
    1.41  (* Ensure that type systems such as "mono_simple!" and "mono_guards?" are
    1.42     handled correctly. *)
    1.43  fun implode_param [s, "?"] = s ^ "?"
    1.44 @@ -205,7 +208,10 @@
    1.45                                    max_default_remote_threads)
    1.46    |> implode_param
    1.47  
    1.48 -val set_default_raw_param = Data.map o AList.update (op =) o unalias_raw_param
    1.49 +fun set_default_raw_param param thy =
    1.50 +  let val ctxt = Proof_Context.init_global thy in
    1.51 +    thy |> Data.map (AList.update (op =) (normalize_raw_param ctxt param))
    1.52 +  end
    1.53  fun default_raw_params ctxt =
    1.54    let val thy = Proof_Context.theory_of ctxt in
    1.55      Data.get thy
    1.56 @@ -224,7 +230,6 @@
    1.57  
    1.58  fun extract_params mode default_params override_params =
    1.59    let
    1.60 -    val override_params = map unalias_raw_param override_params
    1.61      val raw_params = rev override_params @ rev default_params
    1.62      val lookup = Option.map implode_param o AList.lookup (op =) raw_params
    1.63      val lookup_string = the_default "" o lookup
    1.64 @@ -294,15 +299,15 @@
    1.65       timeout = timeout, preplay_timeout = preplay_timeout, expect = expect}
    1.66    end
    1.67  
    1.68 -fun get_params mode ctxt = extract_params mode (default_raw_params ctxt)
    1.69 +fun get_params mode = extract_params mode o default_raw_params
    1.70  fun default_params thy = get_params Normal thy o map (apsnd single)
    1.71  
    1.72  (* Sledgehammer the given subgoal *)
    1.73  
    1.74  val default_minimize_prover = Metis_Tactic.metisN
    1.75  
    1.76 -val is_raw_param_relevant_for_minimize =
    1.77 -  member (op =) params_for_minimize o fst o unalias_raw_param
    1.78 +fun is_raw_param_relevant_for_minimize (name, _) =
    1.79 +  member (op =) params_for_minimize name
    1.80  fun string_for_raw_param (key, values) =
    1.81    key ^ (case implode_param values of "" => "" | value => " = " ^ value)
    1.82  
    1.83 @@ -324,8 +329,7 @@
    1.84  fun hammer_away override_params subcommand opt_i relevance_override state =
    1.85    let
    1.86      val ctxt = Proof.context_of state
    1.87 -    val override_params =
    1.88 -      override_params |> map (check_and_repair_raw_param ctxt)
    1.89 +    val override_params = override_params |> map (normalize_raw_param ctxt)
    1.90    in
    1.91      if subcommand = runN then
    1.92        let val i = the_default 1 opt_i in
    1.93 @@ -368,8 +372,7 @@
    1.94                               (case default_raw_params ctxt |> rev of
    1.95                                  [] => "none"
    1.96                                | params =>
    1.97 -                                params |> map (check_and_repair_raw_param ctxt)
    1.98 -                                       |> map string_for_raw_param
    1.99 +                                params |> map string_for_raw_param
   1.100                                         |> sort_strings |> cat_lines))
   1.101                    end))
   1.102