src/HOL/TPTP/mash_export.ML
author blanchet
Sun, 13 Jan 2013 12:28:20 +0100
changeset 50859 c0f38015a632
parent 50829 01c9a515ccdd
child 50906 67b04a8375b0
permissions -rw-r--r--
don't generate queries with empty dependency list
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     1
(*  Title:      HOL/TPTP/mash_export.ML
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     2
    Author:     Jasmin Blanchette, TU Muenchen
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     3
    Copyright   2012
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     4
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     5
Export Isabelle theory information for MaSh (Machine-learning for Sledgehammer).
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     6
*)
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     7
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     8
signature MASH_EXPORT =
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
     9
sig
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    10
  type params = Sledgehammer_Provers.params
48235
40655464a93b MaSh evaluation driver
blanchet
parents: 48234
diff changeset
    11
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    12
  val generate_accessibility :
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    13
    Proof.context -> theory list -> bool -> string -> unit
48318
325c8fd0d762 more consolidation of MaSh code
blanchet
parents: 48316
diff changeset
    14
  val generate_features :
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    15
    Proof.context -> string -> theory list -> bool -> string -> unit
48333
2250197977dc repair MaSh exporter
blanchet
parents: 48324
diff changeset
    16
  val generate_isar_dependencies :
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    17
    Proof.context -> theory list -> bool -> string -> unit
50484
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
    18
  val generate_prover_dependencies :
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    19
    Proof.context -> params -> int * int option -> theory list -> bool -> string
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    20
    -> unit
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
    21
  val generate_isar_commands :
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
    22
    Proof.context -> string -> theory list -> string -> unit
50484
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
    23
  val generate_prover_commands :
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    24
    Proof.context -> params -> int * int option -> theory list -> string -> unit
48379
2b5ad61e2ccc renamed "iter" fact filter to "MePo" (Meng--Paulson)
blanchet
parents: 48378
diff changeset
    25
  val generate_mepo_suggestions :
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    26
    Proof.context -> params -> theory list -> int -> string -> unit
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
    27
  val generate_mesh_suggestions : int -> string -> string -> string -> unit
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    28
end;
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    29
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    30
structure MaSh_Export : MASH_EXPORT =
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    31
struct
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    32
50485
3c6ac2da2f45 merge aliased theorems in MaSh dependencies, modulo symmetry of equality
blanchet
parents: 50484
diff changeset
    33
open Sledgehammer_Fact
48381
1b7d798460bb renamed ML structures
blanchet
parents: 48379
diff changeset
    34
open Sledgehammer_MePo
1b7d798460bb renamed ML structures
blanchet
parents: 48379
diff changeset
    35
open Sledgehammer_MaSh
48245
854a47677335 generate ATP dependencies
blanchet
parents: 48242
diff changeset
    36
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    37
fun in_range (from, to) j =
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    38
  j >= from andalso (to = NONE orelse j <= the to)
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    39
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    40
fun has_thm_thy th thy =
48316
252f45c04042 drastic overhaul of MaSh data structures + fixed a few performance issues
blanchet
parents: 48315
diff changeset
    41
  Context.theory_name thy = Context.theory_name (theory_of_thm th)
252f45c04042 drastic overhaul of MaSh data structures + fixed a few performance issues
blanchet
parents: 48315
diff changeset
    42
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    43
fun has_thys thys th = exists (has_thm_thy th) thys
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    44
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    45
fun all_facts ctxt =
48531
7da5d3b8aef4 don't export technical theorems for MaSh
blanchet
parents: 48530
diff changeset
    46
  let val css = Sledgehammer_Fact.clasimpset_rule_table_of ctxt in
50442
4f6a4d32522c don't blacklist "case" theorems -- this causes problems in MaSh later
blanchet
parents: 50434
diff changeset
    47
    Sledgehammer_Fact.all_facts ctxt true false Symtab.empty [] [] css
50485
3c6ac2da2f45 merge aliased theorems in MaSh dependencies, modulo symmetry of equality
blanchet
parents: 50484
diff changeset
    48
    |> sort (thm_ord o pairself snd)
48531
7da5d3b8aef4 don't export technical theorems for MaSh
blanchet
parents: 48530
diff changeset
    49
  end
7da5d3b8aef4 don't export technical theorems for MaSh
blanchet
parents: 48530
diff changeset
    50
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    51
fun generate_accessibility ctxt thys include_thys file_name =
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    52
  let
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    53
    val path = file_name |> Path.explode
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    54
    val _ = File.write path ""
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    55
    fun do_fact fact prevs =
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    56
      let
50826
18ace05656cf start using MaSh hints
blanchet
parents: 50814
diff changeset
    57
        val s = encode_str fact ^ ": " ^ encode_strs prevs ^ "\n"
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    58
        val _ = File.append path s
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    59
      in [fact] end
50611
99af6b652b3a linearize eval driver, to work around horrible bug in previous implementation
blanchet
parents: 50582
diff changeset
    60
    val facts =
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    61
      all_facts ctxt
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    62
      |> not include_thys ? filter_out (has_thys thys o snd)
50624
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
    63
      |> map (snd #> nickname_of_thm)
50611
99af6b652b3a linearize eval driver, to work around horrible bug in previous implementation
blanchet
parents: 50582
diff changeset
    64
  in fold do_fact facts []; () end
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    65
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    66
fun generate_features ctxt prover thys include_thys file_name =
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    67
  let
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    68
    val path = file_name |> Path.explode
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    69
    val _ = File.write path ""
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    70
    val facts =
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    71
      all_facts ctxt
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
    72
      |> not include_thys ? filter_out (has_thys thys o snd)
48385
2779dea0b1e0 added locality as a MaSh feature
blanchet
parents: 48381
diff changeset
    73
    fun do_fact ((_, stature), th) =
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    74
      let
50624
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
    75
        val name = nickname_of_thm th
48318
325c8fd0d762 more consolidation of MaSh code
blanchet
parents: 48316
diff changeset
    76
        val feats =
48385
2779dea0b1e0 added locality as a MaSh feature
blanchet
parents: 48381
diff changeset
    77
          features_of ctxt prover (theory_of_thm th) stature [prop_of th]
50582
001a0e12d7f1 tuned order to help debugging
blanchet
parents: 50561
diff changeset
    78
        val s =
50826
18ace05656cf start using MaSh hints
blanchet
parents: 50814
diff changeset
    79
          encode_str name ^ ": " ^ encode_features (sort_wrt fst feats) ^ "\n"
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    80
      in File.append path s end
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    81
  in List.app do_fact facts end
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    82
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
    83
fun isar_or_prover_dependencies_of ctxt params_opt facts name_tabs th
50515
c4a27ab89c9b shared bad MaSh query detection between MePo and MaSh, so that the generated files mirror each other
blanchet
parents: 50511
diff changeset
    84
                                   isar_deps_opt =
50754
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    85
  case params_opt of
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    86
    SOME (params as {provers = prover :: _, ...}) =>
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    87
    prover_dependencies_of ctxt params prover 0 facts name_tabs th |> snd
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    88
  | NONE =>
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    89
    case isar_deps_opt of
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    90
      SOME deps => deps
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
    91
    | NONE => isar_dependencies_of name_tabs th
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
    92
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
    93
fun generate_isar_or_prover_dependencies ctxt params_opt range thys include_thys
50484
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
    94
                                         file_name =
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    95
  let
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    96
    val path = file_name |> Path.explode
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
    97
    val facts =
50485
3c6ac2da2f45 merge aliased theorems in MaSh dependencies, modulo symmetry of equality
blanchet
parents: 50484
diff changeset
    98
      all_facts ctxt |> not include_thys ? filter_out (has_thys thys o snd)
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
    99
    val name_tabs = build_name_tables nickname_of_thm facts
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   100
    fun do_fact (j, (_, th)) =
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   101
      if in_range range j then
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   102
        let
50624
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
   103
          val name = nickname_of_thm th
50561
9a733bd6c0ba added tracing to ATP exporter
blanchet
parents: 50559
diff changeset
   104
          val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   105
          val deps =
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
   106
            isar_or_prover_dependencies_of ctxt params_opt facts name_tabs th
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   107
                                           NONE
50826
18ace05656cf start using MaSh hints
blanchet
parents: 50814
diff changeset
   108
        in encode_str name ^ ": " ^ encode_strs deps ^ "\n" end
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   109
      else
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   110
        ""
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   111
    val lines = Par_List.map do_fact (tag_list 1 facts)
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   112
  in File.write_list path lines end
48304
50e64af9c829 more work on MaSh
blanchet
parents: 48303
diff changeset
   113
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
   114
fun generate_isar_dependencies ctxt =
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   115
  generate_isar_or_prover_dependencies ctxt NONE (1, NONE)
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
   116
50484
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
   117
fun generate_prover_dependencies ctxt params =
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
   118
  generate_isar_or_prover_dependencies ctxt (SOME params)
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
   119
50515
c4a27ab89c9b shared bad MaSh query detection between MePo and MaSh, so that the generated files mirror each other
blanchet
parents: 50511
diff changeset
   120
fun is_bad_query ctxt ho_atp th isar_deps =
50859
c0f38015a632 don't generate queries with empty dependency list
blanchet
parents: 50829
diff changeset
   121
  Thm.legacy_get_kind th = "" orelse
c0f38015a632 don't generate queries with empty dependency list
blanchet
parents: 50829
diff changeset
   122
  null (these (trim_dependencies th isar_deps)) orelse
50523
0799339fea0f get rid of some junk facts in the MaSh evaluation driver
blanchet
parents: 50519
diff changeset
   123
  is_blacklisted_or_something ctxt ho_atp (Thm.get_name_hint th)
50515
c4a27ab89c9b shared bad MaSh query detection between MePo and MaSh, so that the generated files mirror each other
blanchet
parents: 50511
diff changeset
   124
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   125
fun generate_isar_or_prover_commands ctxt prover params_opt range thys
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   126
                                     file_name =
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
   127
  let
50511
8825c36cb1ce don't query blacklisted theorems in evaluation driver
blanchet
parents: 50485
diff changeset
   128
    val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
   129
    val path = file_name |> Path.explode
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
   130
    val facts = all_facts ctxt
50485
3c6ac2da2f45 merge aliased theorems in MaSh dependencies, modulo symmetry of equality
blanchet
parents: 50484
diff changeset
   131
    val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd)
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
   132
    val name_tabs = build_name_tables nickname_of_thm facts
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   133
    fun do_fact (j, ((name, ((_, stature), th)), prevs)) =
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   134
      if in_range range j then
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   135
        let
50561
9a733bd6c0ba added tracing to ATP exporter
blanchet
parents: 50559
diff changeset
   136
          val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   137
          val feats =
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   138
            features_of ctxt prover (theory_of_thm th) stature [prop_of th]
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
   139
          val isar_deps = isar_dependencies_of name_tabs th
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   140
          val deps =
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
   141
            isar_or_prover_dependencies_of ctxt params_opt facts name_tabs th
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   142
                                           (SOME isar_deps)
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   143
          val core =
50826
18ace05656cf start using MaSh hints
blanchet
parents: 50814
diff changeset
   144
            encode_str name ^ ": " ^ encode_strs prevs ^ "; " ^
50582
001a0e12d7f1 tuned order to help debugging
blanchet
parents: 50561
diff changeset
   145
            encode_features (sort_wrt fst feats)
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   146
          val query =
50754
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
   147
            if is_bad_query ctxt ho_atp th isar_deps then ""
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   148
            else "? " ^ core ^ "\n"
50754
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
   149
          val update =
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
   150
            "! " ^ core ^ "; " ^
50826
18ace05656cf start using MaSh hints
blanchet
parents: 50814
diff changeset
   151
            encode_strs (these (trim_dependencies th deps)) ^ "\n"
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   152
        in query ^ update end
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   153
      else
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   154
        ""
50624
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
   155
    val parents =
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
   156
      map (nickname_of_thm o snd) (the_list (try List.last old_facts))
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
   157
    val new_facts = new_facts |> map (`(nickname_of_thm o snd))
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   158
    val prevss = fst (split_last (parents :: map (single o fst) new_facts))
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   159
    val lines = Par_List.map do_fact (tag_list 1 (new_facts ~~ prevss))
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   160
  in File.write_list path lines end
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
   161
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
   162
fun generate_isar_commands ctxt prover =
50559
89c0d2f13cca MaSh exporter can now export subsets of the facts, as consecutive ranges
blanchet
parents: 50523
diff changeset
   163
  generate_isar_or_prover_commands ctxt prover NONE (1, NONE)
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
   164
50484
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
   165
fun generate_prover_commands ctxt (params as {provers = prover :: _, ...}) =
8ec31bdb9d36 adopt the neutral "prover" terminology for MaSh rather than the ambiguous/wrong ATP terminology (which sometimes excludes SMT solvers)
blanchet
parents: 50442
diff changeset
   166
  generate_isar_or_prover_commands ctxt prover (SOME params)
50411
c9023d78d1a6 export ATP and Isar commands separately
blanchet
parents: 50402
diff changeset
   167
50515
c4a27ab89c9b shared bad MaSh query detection between MePo and MaSh, so that the generated files mirror each other
blanchet
parents: 50511
diff changeset
   168
fun generate_mepo_suggestions ctxt (params as {provers = prover :: _, ...}) thys
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   169
                              max_suggs file_name =
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
   170
  let
50515
c4a27ab89c9b shared bad MaSh query detection between MePo and MaSh, so that the generated files mirror each other
blanchet
parents: 50511
diff changeset
   171
    val ho_atp = Sledgehammer_Provers.is_ho_atp ctxt prover
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
   172
    val path = file_name |> Path.explode
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
   173
    val facts = all_facts ctxt
50485
3c6ac2da2f45 merge aliased theorems in MaSh dependencies, modulo symmetry of equality
blanchet
parents: 50484
diff changeset
   174
    val (new_facts, old_facts) = facts |> List.partition (has_thys thys o snd)
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
   175
    val name_tabs = build_name_tables nickname_of_thm facts
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   176
    fun do_fact (j, ((_, th), old_facts)) =
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
   177
      let
50624
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
   178
        val name = nickname_of_thm th
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   179
        val _ = tracing ("Fact " ^ string_of_int j ^ ": " ^ name)
50349
b79803ee14f3 generalized MaSh exporter to sets of theories
blanchet
parents: 48667
diff changeset
   180
        val goal = goal_of_thm (Proof_Context.theory_of ctxt) th
48292
7fcee834c7f5 more code rationalization in relevance filter
blanchet
parents: 48289
diff changeset
   181
        val (_, hyp_ts, concl_t) = ATP_Util.strip_subgoal ctxt goal 1
50735
6b232d76cbc9 refined class handling, to prevent cycles in fact graph
blanchet
parents: 50624
diff changeset
   182
        val isar_deps = isar_dependencies_of name_tabs th
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   183
      in
50754
74a6adcb96ac also generate queries for goals with too many Isar dependencies
blanchet
parents: 50735
diff changeset
   184
        if is_bad_query ctxt ho_atp th isar_deps then
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   185
          ""
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   186
        else
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   187
          let
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   188
            val suggs =
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   189
              old_facts
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   190
              |> Sledgehammer_MePo.mepo_suggested_facts ctxt params prover
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   191
                     max_suggs NONE hyp_ts concl_t
50624
4d0997abce79 improved thm order hack, in case the default names are overridden
blanchet
parents: 50611
diff changeset
   192
              |> map (nickname_of_thm o snd)
50826
18ace05656cf start using MaSh hints
blanchet
parents: 50814
diff changeset
   193
          in encode_str name ^ ": " ^ encode_strs suggs ^ "\n" end
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   194
      end
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   195
    fun accum x (yss as ys :: _) = (x :: ys) :: yss
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   196
    val old_factss = tl (fold accum new_facts [old_facts])
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   197
    val lines = Par_List.map do_fact (tag_list 1 (new_facts ~~ rev old_factss))
50519
2951841ec011 parallelized MaSh exporter
blanchet
parents: 50515
diff changeset
   198
  in File.write_list path lines end
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
   199
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   200
fun generate_mesh_suggestions max_suggs mash_file_name mepo_file_name
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   201
                              mesh_file_name =
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   202
  let
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   203
    val mesh_path = Path.explode mesh_file_name
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   204
    val _ = File.write mesh_path ""
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   205
    fun do_fact (mash_line, mepo_line) =
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   206
      let
50829
01c9a515ccdd fixed escaping for MeSh encoder
blanchet
parents: 50826
diff changeset
   207
        val (name, mash_suggs) =
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   208
          extract_suggestions mash_line
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   209
          ||> (map fst #> weight_mash_facts)
50829
01c9a515ccdd fixed escaping for MeSh encoder
blanchet
parents: 50826
diff changeset
   210
        val (name', mepo_suggs) =
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   211
          extract_suggestions mepo_line
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   212
          ||> (map fst #> weight_mash_facts)
50829
01c9a515ccdd fixed escaping for MeSh encoder
blanchet
parents: 50826
diff changeset
   213
        val _ = if name = name' then () else error "Input files out of sync."
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   214
        val mess =
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   215
          [(mepo_weight, (mepo_suggs, [])),
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   216
           (mash_weight, (mash_suggs, []))]
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   217
        val mesh_suggs = mesh_facts (op =) max_suggs mess
50829
01c9a515ccdd fixed escaping for MeSh encoder
blanchet
parents: 50826
diff changeset
   218
        val mesh_line = encode_str name ^ ": " ^ encode_strs mesh_suggs ^ "\n"
50814
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   219
      in File.append mesh_path mesh_line end
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   220
    val mash_lines = Path.explode mash_file_name |> File.read_lines
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   221
    val mepo_lines = Path.explode mepo_file_name |> File.read_lines
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   222
  in List.app do_fact (mash_lines ~~ mepo_lines) end
4247cbd78aaf export MeSh data as well
blanchet
parents: 50754
diff changeset
   223
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
   224
end;