handle case clashes on Mac file system by encoding goal numbers
authorblanchet
Tue, 09 Apr 2013 16:32:04 +0200
changeset 51652 5ff01d585a8c
parent 51651 21a932f64366
child 51667 354c23ef2784
handle case clashes on Mac file system by encoding goal numbers
src/HOL/TPTP/atp_theory_export.ML
--- a/src/HOL/TPTP/atp_theory_export.ML	Tue Apr 09 15:19:14 2013 +0200
+++ b/src/HOL/TPTP/atp_theory_export.ML	Tue Apr 09 16:32:04 2013 +0200
@@ -259,22 +259,28 @@
 val prelude_base_name = "prelude"
 val prelude_name = prelude_base_name ^ include_suffix
 
-val include_base_name_of_fact = Name.desymbolize false o theory_name_of_fact
+val encode_meta = Sledgehammer_MaSh.encode_str
+
+val include_base_name_of_fact = encode_meta o theory_name_of_fact
 
 fun include_line base_name =
   "include('" ^ include_name ^ "/" ^ base_name ^ include_suffix ^ "').\n"
 
-(* crude hack to detect theorems stated and proved by the user (as opposed to
-   those derived by various packages) *)
-fun should_generate_problem thy (Formula ((_, alt), _, _, _, _)) =
+val hol_base_name = encode_meta "HOL"
+
+fun should_generate_problem thy base_name (Formula ((_, alt), _, _, _, _)) =
   case try (Global_Theory.get_thm thy) alt of
-    SOME th => Thm.legacy_get_kind th <> ""
+    SOME th =>
+    (* This is a crude hack to detect theorems stated and proved by the user (as
+       opposed to those derived by various packages). In addition, we leave out
+       everything in "HOL" as too basic to be interesting. *)
+    Thm.legacy_get_kind th <> "" andalso base_name <> hol_base_name
   | NONE => false
 
 (* Convention: theoryname__goalname *)
-fun problem_name_of base_name alt =
-  base_name ^ "__" ^ perhaps (try (unprefix (base_name ^ "_"))) alt ^
-  problem_suffix
+fun problem_name_of base_name n alt =
+  base_name ^ "__" ^ string_of_int n ^ "_" ^
+  perhaps (try (unprefix (base_name ^ "_"))) alt ^ problem_suffix
 
 fun generate_casc_lbt_isa_files_for_theory ctxt thy format infer_policy type_enc
                                            dir_name =
@@ -308,20 +314,20 @@
         File.append file_order_path (base_name ^ "\n");
         write_lines (ap include_dir name) ss
       end
-    fun write_problem_files _ _ [] = ()
-      | write_problem_files includes [] groups =
-        write_problem_files includes includes groups
-      | write_problem_files includes _ ((base_name, []) :: groups) =
-        write_problem_files (includes @ [include_line base_name]) [] groups
-      | write_problem_files includes seen
+    fun write_problem_files _ _ _ [] = ()
+      | write_problem_files _ includes [] groups =
+        write_problem_files 1 includes includes groups
+      | write_problem_files n includes _ ((base_name, []) :: groups) =
+        write_problem_files n (includes @ [include_line base_name]) [] groups
+      | write_problem_files n includes seen
                             ((base_name, fact :: facts) :: groups) =
         let val fact_s = tptp_string_for_line format fact in
-          (if should_generate_problem thy fact then
+          (if should_generate_problem thy base_name fact then
              let
                val (name, conj) =
                  (case fact of
                     Formula ((ident, alt), _, phi, _, _) =>
-                    (problem_name_of base_name (Name.desymbolize false alt),
+                    (problem_name_of base_name n (encode_meta alt),
                      Formula ((ident, alt), Conjecture, phi, NONE, [])))
                val conj_s = tptp_string_for_line format conj
              in
@@ -330,12 +336,12 @@
              end
            else
              ();
-           write_problem_files includes (seen @ [fact_s])
+           write_problem_files (n + 1) includes (seen @ [fact_s])
                                ((base_name, facts) :: groups))
         end
     val _ = write_prelude ()
     val _ = app write_include_file groups
-    val _ = write_problem_files [include_line prelude_base_name] [] groups
+    val _ = write_problem_files 1 [include_line prelude_base_name] [] groups
   in () end
 
 end;