src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML
changeset 45512 a6cce8032fff
parent 45371 c6f1add24843
child 45514 973bb7846505
equal deleted inserted replaced
45511:9b0f8ca4388e 45512:a6cce8032fff
     9 val prover_timeoutK = "prover_timeout"
     9 val prover_timeoutK = "prover_timeout"
    10 val keepK = "keep"
    10 val keepK = "keep"
    11 val type_encK = "type_enc"
    11 val type_encK = "type_enc"
    12 val soundK = "sound"
    12 val soundK = "sound"
    13 val slicingK = "slicing"
    13 val slicingK = "slicing"
    14 val lambda_translationK = "lambda_translation"
    14 val lambda_transK = "lambda_trans"
    15 val e_weight_methodK = "e_weight_method"
    15 val e_weight_methodK = "e_weight_method"
    16 val force_sosK = "force_sos"
    16 val force_sosK = "force_sos"
    17 val max_relevantK = "max_relevant"
    17 val max_relevantK = "max_relevant"
    18 val max_callsK = "max_calls"
    18 val max_callsK = "max_calls"
    19 val minimizeK = "minimize"
    19 val minimizeK = "minimize"
   353 datatype sh_result =
   353 datatype sh_result =
   354   SH_OK of int * int * (string * locality) list |
   354   SH_OK of int * int * (string * locality) list |
   355   SH_FAIL of int * int |
   355   SH_FAIL of int * int |
   356   SH_ERROR
   356   SH_ERROR
   357 
   357 
   358 fun run_sh prover_name prover type_enc sound max_relevant slicing
   358 fun run_sh prover_name prover type_enc sound max_relevant slicing lambda_trans
   359         lambda_translation e_weight_method force_sos hard_timeout timeout dir
   359         e_weight_method force_sos hard_timeout timeout dir pos st =
   360         pos st =
       
   361   let
   360   let
   362     val {context = ctxt, facts = chained_ths, goal} = Proof.goal st
   361     val {context = ctxt, facts = chained_ths, goal} = Proof.goal st
   363     val i = 1
   362     val i = 1
   364     fun set_file_name (SOME dir) =
   363     fun set_file_name (SOME dir) =
   365         Config.put Sledgehammer_Provers.dest_dir dir
   364         Config.put Sledgehammer_Provers.dest_dir dir
   371       | set_file_name NONE = I
   370       | set_file_name NONE = I
   372     val st' =
   371     val st' =
   373       st |> Proof.map_context
   372       st |> Proof.map_context
   374                 (set_file_name dir
   373                 (set_file_name dir
   375                  #> (Option.map (Config.put
   374                  #> (Option.map (Config.put
   376                        Sledgehammer_Provers.atp_lambda_translation)
   375                        Sledgehammer_Provers.atp_lambda_trans)
   377                        lambda_translation |> the_default I)
   376                        lambda_trans |> the_default I)
   378                  #> (Option.map (Config.put ATP_Systems.e_weight_method)
   377                  #> (Option.map (Config.put ATP_Systems.e_weight_method)
   379                        e_weight_method |> the_default I)
   378                        e_weight_method |> the_default I)
   380                  #> (Option.map (Config.put ATP_Systems.force_sos)
   379                  #> (Option.map (Config.put ATP_Systems.force_sos)
   381                        force_sos |> the_default I))
   380                        force_sos |> the_default I))
   382     val params as {relevance_thresholds, max_relevant, slicing, ...} =
   381     val params as {relevance_thresholds, max_relevant, slicing, ...} =
   464     val (prover_name, prover) = get_prover (Proof.context_of st) args
   463     val (prover_name, prover) = get_prover (Proof.context_of st) args
   465     val type_enc = AList.lookup (op =) args type_encK |> the_default "smart"
   464     val type_enc = AList.lookup (op =) args type_encK |> the_default "smart"
   466     val sound = AList.lookup (op =) args soundK |> the_default "false"
   465     val sound = AList.lookup (op =) args soundK |> the_default "false"
   467     val max_relevant = AList.lookup (op =) args max_relevantK |> the_default "smart"
   466     val max_relevant = AList.lookup (op =) args max_relevantK |> the_default "smart"
   468     val slicing = AList.lookup (op =) args slicingK |> the_default "true"
   467     val slicing = AList.lookup (op =) args slicingK |> the_default "true"
   469     val lambda_translation = AList.lookup (op =) args lambda_translationK
   468     val lambda_trans = AList.lookup (op =) args lambda_transK
   470     val e_weight_method = AList.lookup (op =) args e_weight_methodK
   469     val e_weight_method = AList.lookup (op =) args e_weight_methodK
   471     val force_sos = AList.lookup (op =) args force_sosK
   470     val force_sos = AList.lookup (op =) args force_sosK
   472       |> Option.map (curry (op <>) "false")
   471       |> Option.map (curry (op <>) "false")
   473     val dir = AList.lookup (op =) args keepK
   472     val dir = AList.lookup (op =) args keepK
   474     val timeout = Mirabelle.get_int_setting args (prover_timeoutK, 30)
   473     val timeout = Mirabelle.get_int_setting args (prover_timeoutK, 30)
   475     (* always use a hard timeout, but give some slack so that the automatic
   474     (* always use a hard timeout, but give some slack so that the automatic
   476        minimizer has a chance to do its magic *)
   475        minimizer has a chance to do its magic *)
   477     val hard_timeout = SOME (2 * timeout)
   476     val hard_timeout = SOME (2 * timeout)
   478     val (msg, result) =
   477     val (msg, result) =
   479       run_sh prover_name prover type_enc sound max_relevant slicing
   478       run_sh prover_name prover type_enc sound max_relevant slicing lambda_trans
   480         lambda_translation e_weight_method force_sos hard_timeout timeout dir
   479         e_weight_method force_sos hard_timeout timeout dir pos st
   481         pos st
       
   482   in
   480   in
   483     case result of
   481     case result of
   484       SH_OK (time_isa, time_prover, names) =>
   482       SH_OK (time_isa, time_prover, names) =>
   485         let
   483         let
   486           fun get_thms (name, loc) =
   484           fun get_thms (name, loc) =