src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 36373 66af0a49de39
parent 36371 8c83ea1a7740
child 36375 2482446a604c
     1.1 --- a/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Fri Apr 23 16:21:47 2010 +0200
     1.2 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Fri Apr 23 16:55:51 2010 +0200
     1.3 @@ -53,13 +53,13 @@
     1.4  val _ =
     1.5    ProofGeneralPgip.add_preference Preferences.category_proof
     1.6        (Preferences.int_pref timeout
     1.7 -          "Sledgehammer: Time limit"
     1.8 +          "Sledgehammer: Time Limit"
     1.9            "ATPs will be interrupted after this time (in seconds)")
    1.10  
    1.11  val _ =
    1.12    ProofGeneralPgip.add_preference Preferences.category_proof
    1.13        (Preferences.bool_pref full_types
    1.14 -          "Sledgehammer: Full types" "ATPs will use full type information")
    1.15 +          "Sledgehammer: Full Types" "ATPs will use full type information")
    1.16  
    1.17  type raw_param = string * string list
    1.18  
    1.19 @@ -196,6 +196,21 @@
    1.20  fun get_params thy = extract_params thy (default_raw_params thy)
    1.21  fun default_params thy = get_params thy o map (apsnd single)
    1.22  
    1.23 +(* Sledgehammer the given subgoal *)
    1.24 +
    1.25 +fun run {atps = [], ...} _ _ _ _ = error "No ATP is set."
    1.26 +  | run (params as {atps, timeout, ...}) i relevance_override minimize_command
    1.27 +        proof_state =
    1.28 +    let
    1.29 +      val birth_time = Time.now ()
    1.30 +      val death_time = Time.+ (birth_time, timeout)
    1.31 +      val _ = kill_atps ()  (* race w.r.t. other invocations of Sledgehammer *)
    1.32 +      val _ = priority "Sledgehammering..."
    1.33 +      val _ = List.app (start_prover_thread params birth_time death_time i
    1.34 +                                            relevance_override minimize_command
    1.35 +                                            proof_state) atps
    1.36 +    in () end
    1.37 +
    1.38  fun minimize override_params old_style_args i fact_refs state =
    1.39    let
    1.40      val thy = Proof.theory_of state
    1.41 @@ -232,6 +247,9 @@
    1.42      priority (#2 (minimize_theorems params prover atp i state name_thms_pairs))
    1.43    end
    1.44  
    1.45 +val sledgehammerN = "sledgehammer"
    1.46 +val sledgehammer_paramsN = "sledgehammer_params"
    1.47 +
    1.48  val runN = "run"
    1.49  val minimizeN = "minimize"
    1.50  val messagesN = "messages"
    1.51 @@ -252,7 +270,7 @@
    1.52           | value => " = " ^ value)
    1.53  
    1.54  fun minimize_command override_params i atp_name facts =
    1.55 -  "sledgehammer minimize [atp = " ^ atp_name ^
    1.56 +  sledgehammerN ^ " " ^ minimizeN ^ " [atp = " ^ atp_name ^
    1.57    (override_params |> filter is_raw_param_relevant_for_minimize
    1.58                     |> implode o map (prefix ", " o string_for_raw_param)) ^
    1.59    "] (" ^ space_implode " " facts ^ ")" ^
    1.60 @@ -265,8 +283,8 @@
    1.61    in
    1.62      if subcommand = runN then
    1.63        let val i = the_default 1 opt_i in
    1.64 -        sledgehammer (get_params thy override_params) i relevance_override
    1.65 -                     (minimize_command override_params i) state
    1.66 +        run (get_params thy override_params) i relevance_override
    1.67 +            (minimize_command override_params i) state
    1.68        end
    1.69      else if subcommand = minimizeN then
    1.70        minimize (map (apfst minimizize_raw_param_name) override_params) []
    1.71 @@ -355,11 +373,11 @@
    1.72          Toplevel.keep (minimize [] args 1 fact_refs o Toplevel.proof_of)))
    1.73  
    1.74  val _ =
    1.75 -  OuterSyntax.improper_command "sledgehammer"
    1.76 +  OuterSyntax.improper_command sledgehammerN
    1.77      "search for first-order proof using automatic theorem provers" K.diag
    1.78      parse_sledgehammer_command
    1.79  val _ =
    1.80 -  OuterSyntax.command "sledgehammer_params"
    1.81 +  OuterSyntax.command sledgehammer_paramsN
    1.82      "set and display the default parameters for Sledgehammer" K.thy_decl
    1.83      parse_sledgehammer_params_command
    1.84