src/HOL/TPTP/mash_export.ML
changeset 57120 f8112c4b9cb8
parent 57077 5bc908e5bf42
child 57121 426ab5fabcae
--- a/src/HOL/TPTP/mash_export.ML	Fri May 30 08:23:08 2014 +0200
+++ b/src/HOL/TPTP/mash_export.ML	Fri May 30 12:27:51 2014 +0200
@@ -21,6 +21,8 @@
     theory list -> bool -> int -> string -> unit
   val generate_mepo_suggestions : Proof.context -> params -> (int * int option) * int ->
     theory list -> bool -> int -> string -> unit
+  val generate_mash_suggestions : Proof.context -> params -> (int * int option) * int ->
+    theory list -> bool -> int -> string -> unit
   val generate_mesh_suggestions : int -> string -> string -> string -> unit
 end;
 
@@ -220,8 +222,8 @@
 fun generate_prover_commands ctxt (params as {provers = prover :: _, ...}) =
   generate_isar_or_prover_commands ctxt prover (SOME params)
 
-fun generate_mepo_suggestions ctxt (params as {provers = prover :: _, ...}) (range, step) thys
-    linearize max_suggs file_name =
+fun generate_mepo_or_mash_suggestions mepo_or_mash_suggested_facts ctxt
+    (params as {provers = prover :: _, ...}) (range, step) thys linearize max_suggs file_name =
   let
     val ho_atp = is_ho_atp ctxt prover
     val path = file_name |> Path.explode
@@ -245,10 +247,11 @@
               val suggs =
                 old_facts
                 |> not linearize ? filter_accessible_from th
-                |> Sledgehammer_Fact.drop_duplicate_facts
-                |> Sledgehammer_MePo.mepo_suggested_facts ctxt params max_suggs NONE hyp_ts concl_t
+                |> mepo_or_mash_suggested_facts ctxt params max_suggs hyp_ts concl_t
                 |> map (nickname_of_thm o snd)
-            in encode_str name ^ ": " ^ encode_strs suggs ^ "\n" end
+            in
+              encode_str name ^ ": " ^ encode_strs suggs ^ "\n"
+            end
         end
       else
         ""
@@ -260,6 +263,22 @@
     File.write_list path lines
   end
 
+val generate_mepo_suggestions =
+  generate_mepo_or_mash_suggestions
+    (fn ctxt => fn params => fn max_suggs => fn hyp_ts => fn concl_t =>
+       Sledgehammer_Fact.drop_duplicate_facts
+       #> Sledgehammer_MePo.mepo_suggested_facts ctxt params max_suggs NONE hyp_ts concl_t)
+
+fun generate_mash_suggestions ctxt params =
+  (Sledgehammer_MaSh.mash_unlearn ctxt params;
+   generate_mepo_or_mash_suggestions
+     (fn ctxt => fn params as {provers = prover :: _, ...} => fn max_suggs => fn hyp_ts =>
+          fn concl_t =>
+        tap (Sledgehammer_MaSh.mash_learn_facts ctxt params prover false 2 false
+          Sledgehammer_Util.one_year)
+        #> Sledgehammer_MaSh.mash_suggested_facts ctxt params max_suggs hyp_ts concl_t
+        #> fst) ctxt params)
+
 fun generate_mesh_suggestions max_suggs mash_file_name mepo_file_name mesh_file_name =
   let
     val mesh_path = Path.explode mesh_file_name