src/HOL/TPTP/mash_export.ML
changeset 61321 c982a4cc8dc4
parent 60649 e007aa6a8aa2
child 61322 44f4ffe2b210
equal deleted inserted replaced
61320:69022bbcd012 61321:c982a4cc8dc4
    80       end
    80       end
    81 
    81 
    82     val facts =
    82     val facts =
    83       all_facts ctxt
    83       all_facts ctxt
    84       |> filter_out (has_thys thys o snd)
    84       |> filter_out (has_thys thys o snd)
    85       |> attach_parents_to_facts ctxt []
    85       |> attach_parents_to_facts []
    86       |> map (apsnd (nickname_of_thm ctxt o snd))
    86       |> map (apsnd (nickname_of_thm o snd))
    87   in
    87   in
    88     File.write path "";
    88     File.write path "";
    89     List.app do_fact facts
    89     List.app do_fact facts
    90   end
    90   end
    91 
    91 
    95     val _ = File.write path ""
    95     val _ = File.write path ""
    96     val facts = all_facts ctxt |> filter_out (has_thys thys o snd)
    96     val facts = all_facts ctxt |> filter_out (has_thys thys o snd)
    97 
    97 
    98     fun do_fact ((_, stature), th) =
    98     fun do_fact ((_, stature), th) =
    99       let
    99       let
   100         val name = nickname_of_thm ctxt th
   100         val name = nickname_of_thm th
   101         val feats = features_of ctxt (Thm.theory_name_of_thm th) stature [Thm.prop_of th]
   101         val feats = features_of ctxt (Thm.theory_name_of_thm th) stature [Thm.prop_of th]
   102         val s = encode_str name ^ ": " ^ encode_strs (sort string_ord feats) ^ "\n"
   102         val s = encode_str name ^ ": " ^ encode_strs (sort string_ord feats) ^ "\n"
   103       in
   103       in
   104         File.append path s
   104         File.append path s
   105       end
   105       end
   122         |>> (fn true => prover_marker | false => prover_failed_marker)
   122         |>> (fn true => prover_marker | false => prover_failed_marker)
   123       | NONE =>
   123       | NONE =>
   124         let
   124         let
   125           val deps =
   125           val deps =
   126             (case isar_deps_opt of
   126             (case isar_deps_opt of
   127               NONE => isar_dependencies_of ctxt name_tabs th
   127               NONE => isar_dependencies_of name_tabs th
   128             | deps => deps)
   128             | deps => deps)
   129         in
   129         in
   130           (case deps of
   130           (case deps of
   131             NONE => (omitted_marker, [])
   131             NONE => (omitted_marker, [])
   132           | SOME [] => (unprovable_marker, [])
   132           | SOME [] => (unprovable_marker, [])
   140 
   140 
   141 fun generate_isar_or_prover_dependencies ctxt params_opt range thys file_name =
   141 fun generate_isar_or_prover_dependencies ctxt params_opt range thys file_name =
   142   let
   142   let
   143     val path = Path.explode file_name
   143     val path = Path.explode file_name
   144     val facts = filter_out (has_thys thys o snd) (all_facts ctxt)
   144     val facts = filter_out (has_thys thys o snd) (all_facts ctxt)
   145     val name_tabs = build_name_tables (nickname_of_thm ctxt) facts
   145     val name_tabs = build_name_tables nickname_of_thm facts
   146 
   146 
   147     fun do_fact (j, (_, th)) =
   147     fun do_fact (j, (_, th)) =
   148       if in_range range j then
   148       if in_range range j then
   149         let
   149         let
   150           val name = nickname_of_thm ctxt th
   150           val name = nickname_of_thm th
   151           val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
   151           val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
   152           val access_facts = filter_accessible_from th facts
   152           val access_facts = filter_accessible_from th facts
   153           val (marker, deps) = smart_dependencies_of ctxt params_opt access_facts name_tabs th NONE
   153           val (marker, deps) = smart_dependencies_of ctxt params_opt access_facts name_tabs th NONE
   154         in
   154         in
   155           encode_str name ^ ": " ^ marker ^ " " ^ encode_strs deps ^ "\n"
   155           encode_str name ^ ": " ^ marker ^ " " ^ encode_strs deps ^ "\n"
   178   let
   178   let
   179     val ho_atp = is_ho_atp ctxt prover
   179     val ho_atp = is_ho_atp ctxt prover
   180     val path = Path.explode file_name
   180     val path = Path.explode file_name
   181     val facts = all_facts ctxt
   181     val facts = all_facts ctxt
   182     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 name_tabs = build_name_tables (nickname_of_thm ctxt) facts
   183     val name_tabs = build_name_tables nickname_of_thm facts
   184 
   184 
   185     fun do_fact (j, (name, (parents, ((_, stature), th)))) =
   185     fun do_fact (j, (name, (parents, ((_, stature), th)))) =
   186       if in_range range j then
   186       if in_range range j then
   187         let
   187         let
   188           val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
   188           val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
   189           val isar_deps = isar_dependencies_of ctxt name_tabs th
   189           val isar_deps = isar_dependencies_of name_tabs th
   190           val do_query = not (is_bad_query ctxt ho_atp step j th isar_deps)
   190           val do_query = not (is_bad_query ctxt ho_atp step j th isar_deps)
   191           val goal_feats = features_of ctxt (Thm.theory_name_of_thm th) stature [Thm.prop_of th]
   191           val goal_feats = features_of ctxt (Thm.theory_name_of_thm th) stature [Thm.prop_of th]
   192           val access_facts = filter_accessible_from th new_facts @ old_facts
   192           val access_facts = filter_accessible_from th new_facts @ old_facts
   193           val (marker, deps) =
   193           val (marker, deps) =
   194             smart_dependencies_of ctxt params_opt access_facts name_tabs th isar_deps
   194             smart_dependencies_of ctxt params_opt access_facts name_tabs th isar_deps
   223       else
   223       else
   224         ""
   224         ""
   225 
   225 
   226     val new_facts =
   226     val new_facts =
   227       new_facts
   227       new_facts
   228       |> attach_parents_to_facts ctxt old_facts
   228       |> attach_parents_to_facts old_facts
   229       |> map (`(nickname_of_thm ctxt o snd o snd))
   229       |> map (`(nickname_of_thm o snd o snd))
   230     val lines = map do_fact (tag_list 1 new_facts)
   230     val lines = map do_fact (tag_list 1 new_facts)
   231   in
   231   in
   232     File.write_list path lines
   232     File.write_list path lines
   233   end
   233   end
   234 
   234 
   243   let
   243   let
   244     val ho_atp = is_ho_atp ctxt prover
   244     val ho_atp = is_ho_atp ctxt prover
   245     val path = Path.explode file_name
   245     val path = Path.explode file_name
   246     val facts = all_facts ctxt
   246     val facts = all_facts ctxt
   247     val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd)
   247     val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd)
   248     val name_tabs = build_name_tables (nickname_of_thm ctxt) facts
   248     val name_tabs = build_name_tables nickname_of_thm facts
   249 
   249 
   250     fun do_fact (j, ((_, th), old_facts)) =
   250     fun do_fact (j, ((_, th), old_facts)) =
   251       if in_range range j then
   251       if in_range range j then
   252         let
   252         let
   253           val name = nickname_of_thm ctxt th
   253           val name = nickname_of_thm th
   254           val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
   254           val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
   255           val goal = goal_of_thm (Proof_Context.theory_of ctxt) th
   255           val goal = goal_of_thm (Proof_Context.theory_of ctxt) th
   256           val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal goal 1 ctxt
   256           val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal goal 1 ctxt
   257           val isar_deps = isar_dependencies_of ctxt name_tabs th
   257           val isar_deps = isar_dependencies_of name_tabs th
   258         in
   258         in
   259           if is_bad_query ctxt ho_atp step j th isar_deps then
   259           if is_bad_query ctxt ho_atp step j th isar_deps then
   260             ""
   260             ""
   261           else
   261           else
   262             let
   262             let
   263               val suggs =
   263               val suggs =
   264                 old_facts
   264                 old_facts
   265                 |> filter_accessible_from th
   265                 |> filter_accessible_from th
   266                 |> mepo_or_mash_suggested_facts ctxt (Thm.theory_name_of_thm th)
   266                 |> mepo_or_mash_suggested_facts ctxt (Thm.theory_name_of_thm th)
   267                   params max_suggs hyp_ts concl_t
   267                   params max_suggs hyp_ts concl_t
   268                 |> map (nickname_of_thm ctxt o snd)
   268                 |> map (nickname_of_thm o snd)
   269             in
   269             in
   270               encode_str name ^ ": " ^ encode_strs suggs ^ "\n"
   270               encode_str name ^ ": " ^ encode_strs suggs ^ "\n"
   271             end
   271             end
   272         end
   272         end
   273       else
   273       else