src/HOL/TPTP/mash_export.ML
changeset 50515 c4a27ab89c9b
parent 50511 8825c36cb1ce
child 50519 2951841ec011
equal deleted inserted replaced
50514:1d1be8bf4cb2 50515:c4a27ab89c9b
    95           features_of ctxt prover (theory_of_thm th) stature [prop_of th]
    95           features_of ctxt prover (theory_of_thm th) stature [prop_of th]
    96         val s = escape_meta name ^ ": " ^ encode_features feats ^ "\n"
    96         val s = escape_meta name ^ ": " ^ encode_features feats ^ "\n"
    97       in File.append path s end
    97       in File.append path s end
    98   in List.app do_fact facts end
    98   in List.app do_fact facts end
    99 
    99 
   100 fun isar_or_prover_dependencies_of ctxt params_opt facts all_names th =
   100 fun isar_or_prover_dependencies_of ctxt params_opt facts all_names th
       
   101                                    isar_deps_opt =
   101   (case params_opt of
   102   (case params_opt of
   102      SOME (params as {provers = prover :: _, ...}) =>
   103      SOME (params as {provers = prover :: _, ...}) =>
   103      prover_dependencies_of ctxt params prover 0 facts all_names th |> snd
   104      prover_dependencies_of ctxt params prover 0 facts all_names th |> snd
   104    | NONE => isar_dependencies_of all_names th)
   105    | NONE =>
       
   106      case isar_deps_opt of
       
   107        SOME deps => deps
       
   108      | NONE => isar_dependencies_of all_names th)
   105   |> these
   109   |> these
   106 
   110 
   107 fun generate_isar_or_prover_dependencies ctxt params_opt thys include_thys
   111 fun generate_isar_or_prover_dependencies ctxt params_opt thys include_thys
   108                                          file_name =
   112                                          file_name =
   109   let
   113   let
   114     val all_names = build_all_names nickname_of facts
   118     val all_names = build_all_names nickname_of facts
   115     fun do_fact (_, th) =
   119     fun do_fact (_, th) =
   116       let
   120       let
   117         val name = nickname_of th
   121         val name = nickname_of th
   118         val deps =
   122         val deps =
   119           isar_or_prover_dependencies_of ctxt params_opt facts all_names th
   123           isar_or_prover_dependencies_of ctxt params_opt facts all_names th NONE
   120         val s = escape_meta name ^ ": " ^ escape_metas deps ^ "\n"
   124         val s = escape_meta name ^ ": " ^ escape_metas deps ^ "\n"
   121       in File.append path s end
   125       in File.append path s end
   122   in List.app do_fact facts end
   126   in List.app do_fact facts end
   123 
   127 
   124 fun generate_isar_dependencies ctxt =
   128 fun generate_isar_dependencies ctxt =
   125   generate_isar_or_prover_dependencies ctxt NONE
   129   generate_isar_or_prover_dependencies ctxt NONE
   126 
   130 
   127 fun generate_prover_dependencies ctxt params =
   131 fun generate_prover_dependencies ctxt params =
   128   generate_isar_or_prover_dependencies ctxt (SOME params)
   132   generate_isar_or_prover_dependencies ctxt (SOME params)
       
   133 
       
   134 fun is_bad_query ctxt ho_atp th isar_deps =
       
   135   Thm.legacy_get_kind th = "" orelse null isar_deps orelse
       
   136   is_blacklisted_or_something ctxt ho_atp (Thm.get_name_hint th) orelse
       
   137   Sledgehammer_Fact.is_bad_for_atps ho_atp th
   129 
   138 
   130 fun generate_isar_or_prover_commands ctxt prover params_opt thys file_name =
   139 fun generate_isar_or_prover_commands ctxt prover params_opt thys file_name =
   131   let
   140   let
   132     val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover
   141     val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover
   133     val path = file_name |> Path.explode
   142     val path = file_name |> Path.explode
   138     fun do_fact ((_, stature), th) prevs =
   147     fun do_fact ((_, stature), th) prevs =
   139       let
   148       let
   140         val name = nickname_of th
   149         val name = nickname_of th
   141         val feats =
   150         val feats =
   142           features_of ctxt prover (theory_of_thm th) stature [prop_of th]
   151           features_of ctxt prover (theory_of_thm th) stature [prop_of th]
       
   152         val isar_deps = isar_dependencies_of all_names th
   143         val deps =
   153         val deps =
   144           isar_or_prover_dependencies_of ctxt params_opt facts all_names th
   154           isar_or_prover_dependencies_of ctxt params_opt facts all_names th
   145         val kind = Thm.legacy_get_kind th
   155                                          (SOME isar_deps)
   146         val core =
   156         val core =
   147           escape_meta name ^ ": " ^ escape_metas prevs ^ "; " ^
   157           escape_meta name ^ ": " ^ escape_metas prevs ^ "; " ^
   148           encode_features feats
   158           encode_features feats
   149         val query =
   159         val query =
   150           if kind = "" orelse null deps orelse
   160           if is_bad_query ctxt ho_atp th (these isar_deps) then ""
   151              is_blacklisted_or_something ctxt ho_atp name orelse
   161           else "? " ^ core ^ "\n"
   152              Sledgehammer_Fact.is_bad_for_atps ho_atp th then
       
   153             ""
       
   154           else
       
   155             "? " ^ core ^ "\n"
       
   156         val update = "! " ^ core ^ "; " ^ escape_metas deps ^ "\n"
   162         val update = "! " ^ core ^ "; " ^ escape_metas deps ^ "\n"
   157         val _ = File.append path (query ^ update)
   163         val _ = File.append path (query ^ update)
   158       in [name] end
   164       in [name] end
   159     val thy_map = old_facts |> thy_map_from_facts
   165     val thy_map = old_facts |> thy_map_from_facts
   160     val parents = fold (add_thy_parent_facts thy_map) thys []
   166     val parents = fold (add_thy_parent_facts thy_map) thys []
   164   generate_isar_or_prover_commands ctxt prover NONE
   170   generate_isar_or_prover_commands ctxt prover NONE
   165 
   171 
   166 fun generate_prover_commands ctxt (params as {provers = prover :: _, ...}) =
   172 fun generate_prover_commands ctxt (params as {provers = prover :: _, ...}) =
   167   generate_isar_or_prover_commands ctxt prover (SOME params)
   173   generate_isar_or_prover_commands ctxt prover (SOME params)
   168 
   174 
   169 fun generate_mepo_suggestions ctxt (params as {provers, ...}) thys max_relevant
   175 fun generate_mepo_suggestions ctxt (params as {provers = prover :: _, ...}) thys
   170                               file_name =
   176                               max_facts file_name =
   171   let
   177   let
   172     val path = file_name |> Path.explode
   178     val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover
   173     val _ = File.write path ""
   179     val path = file_name |> Path.explode
   174     val prover = hd provers
   180     val _ = File.write path ""
   175     val facts = all_facts ctxt
   181     val facts = all_facts ctxt
   176     val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd)
   182     val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd)
       
   183     val all_names = build_all_names nickname_of facts
   177     fun do_fact (fact as (_, th)) old_facts =
   184     fun do_fact (fact as (_, th)) old_facts =
   178       let
   185       let
   179         val name = nickname_of th
   186         val name = nickname_of th
   180         val goal = goal_of_thm (Proof_Context.theory_of ctxt) th
   187         val goal = goal_of_thm (Proof_Context.theory_of ctxt) th
   181         val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal 1
   188         val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal 1
   182         val kind = Thm.legacy_get_kind th
   189         val isar_deps = isar_dependencies_of all_names th
   183         val _ =
   190         val _ =
   184           if kind <> "" then
   191           if is_bad_query ctxt ho_atp th (these isar_deps) then
       
   192             ()
       
   193           else
   185             let
   194             let
   186               val suggs =
   195               val suggs =
   187                 old_facts
   196                 old_facts
   188                 |> Sledgehammer_MePo.mepo_suggested_facts ctxt params prover
   197                 |> Sledgehammer_MePo.mepo_suggested_facts ctxt params prover
   189                        max_relevant NONE hyp_ts concl_t
   198                        max_facts NONE hyp_ts concl_t
   190                 |> map (nickname_of o snd)
   199                 |> map (nickname_of o snd)
   191               val s = escape_meta name ^ ": " ^ escape_metas suggs ^ "\n"
   200               val s = escape_meta name ^ ": " ^ escape_metas suggs ^ "\n"
   192             in File.append path s end
   201             in File.append path s end
   193           else
       
   194             ()
       
   195       in fact :: old_facts end
   202       in fact :: old_facts end
   196   in fold do_fact new_facts old_facts; () end
   203   in fold do_fact new_facts old_facts; () end
   197 
   204 
   198 end;
   205 end;