added MaSh learning to Mirabelle
authorblanchet
Tue, 04 Dec 2012 19:09:44 +0100
changeset 51367db8cae658807
parent 51366 fb48de1f39ba
child 51368 4258aeca13a0
added MaSh learning to Mirabelle
src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML
     1.1 --- a/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML	Tue Dec 04 18:23:50 2012 +0100
     1.2 +++ b/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML	Tue Dec 04 19:09:44 2012 +0100
     1.3 @@ -361,19 +361,24 @@
     1.4  
     1.5  fun change_data id f = (Unsynchronized.change data (AList.map_entry (op =) id f); ())
     1.6  
     1.7 -
     1.8 -fun get_prover ctxt args =
     1.9 +fun get_prover_name ctxt args =
    1.10    let
    1.11      fun default_prover_name () =
    1.12        hd (#provers (Sledgehammer_Isar.default_params ctxt []))
    1.13        handle List.Empty => error "No ATP available."
    1.14 -    fun get_prover name =
    1.15 -      (name, Sledgehammer_Minimize.get_minimizing_prover ctxt
    1.16 -                Sledgehammer_Provers.Normal (K (K ())) name)
    1.17    in
    1.18      (case AList.lookup (op =) args proverK of
    1.19 -      SOME name => get_prover name
    1.20 -    | NONE => get_prover (default_prover_name ()))
    1.21 +      SOME name => name
    1.22 +    | NONE => default_prover_name ())
    1.23 +  end
    1.24 +
    1.25 +fun get_prover ctxt name params goal all_facts =
    1.26 +  let
    1.27 +    fun learn prover =
    1.28 +      Sledgehammer_MaSh.mash_learn_proof ctxt params prover (prop_of goal) all_facts
    1.29 +  in
    1.30 +    Sledgehammer_Minimize.get_minimizing_prover ctxt Sledgehammer_Provers.Normal
    1.31 +      learn name
    1.32    end
    1.33  
    1.34  type stature = ATP_Problem_Generate.stature
    1.35 @@ -401,7 +406,7 @@
    1.36    SH_FAIL of int * int |
    1.37    SH_ERROR
    1.38  
    1.39 -fun run_sh prover_name prover fact_filter type_enc strict max_facts slice
    1.40 +fun run_sh prover_name fact_filter type_enc strict max_facts slice
    1.41        lam_trans uncurried_aliases e_selection_heuristic term_order force_sos
    1.42        hard_timeout timeout preplay_timeout sh_minimizeLST
    1.43        max_new_mono_instancesLST max_mono_itersLST dir pos st =
    1.44 @@ -472,6 +477,7 @@
    1.45            |> Sledgehammer_MaSh.relevant_facts ctxt params prover_name
    1.46                   (the_default default_max_facts max_facts)
    1.47                   Sledgehammer_Fact.no_fact_override hyp_ts concl_t
    1.48 +        val prover = get_prover ctxt prover_name params goal facts
    1.49          val problem =
    1.50            {state = st', goal = goal, subgoal = i,
    1.51             subgoal_count = Sledgehammer_Util.subgoal_count st,
    1.52 @@ -494,10 +500,11 @@
    1.53  fun run_sledgehammer trivial args reconstructor named_thms id
    1.54        ({pre=st, log, pos, ...}: Mirabelle.run_args) =
    1.55    let
    1.56 +    val ctxt = Proof.context_of st
    1.57      val triv_str = if trivial then "[T] " else ""
    1.58      val _ = change_data id inc_sh_calls
    1.59      val _ = if trivial then () else change_data id inc_sh_nontriv_calls
    1.60 -    val (prover_name, prover) = get_prover (Proof.context_of st) args
    1.61 +    val prover_name = get_prover_name ctxt args
    1.62      val fact_filter = AList.lookup (op =) args fact_filterK |> the_default fact_filter_default
    1.63      val type_enc = AList.lookup (op =) args type_encK |> the_default type_enc_default
    1.64      val strict = AList.lookup (op =) args strictK |> the_default strict_default
    1.65 @@ -526,8 +533,8 @@
    1.66      val max_mono_itersLST = available_parameter args max_mono_itersK max_mono_itersK
    1.67      val hard_timeout = SOME (4 * timeout)
    1.68      val (msg, result) =
    1.69 -      run_sh prover_name prover fact_filter type_enc strict max_facts slice
    1.70 -        lam_trans uncurried_aliases e_selection_heuristic term_order force_sos
    1.71 +      run_sh prover_name fact_filter type_enc strict max_facts slice lam_trans
    1.72 +        uncurried_aliases e_selection_heuristic term_order force_sos
    1.73          hard_timeout timeout preplay_timeout sh_minimizeLST
    1.74          max_new_mono_instancesLST max_mono_itersLST dir pos st
    1.75    in
    1.76 @@ -565,7 +572,7 @@
    1.77    let
    1.78      val ctxt = Proof.context_of st
    1.79      val n0 = length (these (!named_thms))
    1.80 -    val (prover_name, _) = get_prover ctxt args
    1.81 +    val prover_name = get_prover_name ctxt args
    1.82      val type_enc = AList.lookup (op =) args type_encK |> the_default type_enc_default
    1.83      val strict = AList.lookup (op =) args strictK |> the_default strict_default
    1.84      val timeout =