src/HOL/TPTP/mash_export.ML
author blanchet
Wed, 18 Jul 2012 08:44:03 +0200
changeset 48289 6b65f1ad0e4b
parent 48251 6cdcfbddc077
child 48292 7fcee834c7f5
permissions -rw-r--r--
systematize lazy names in relevance filter
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
48245
854a47677335 generate ATP dependencies
blanchet
parents: 48242
diff changeset
    12
  val generate_commands : theory -> string -> unit
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    13
  val generate_iter_suggestions :
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    14
    Proof.context -> params -> theory -> int -> string -> unit
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    15
end;
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    16
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    17
structure MaSh_Export : MASH_EXPORT =
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    18
struct
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    19
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    20
open Sledgehammer_Filter_MaSh
48245
854a47677335 generate ATP dependencies
blanchet
parents: 48242
diff changeset
    21
854a47677335 generate ATP dependencies
blanchet
parents: 48242
diff changeset
    22
fun generate_commands thy file_name =
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    23
  let
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    24
    val path = file_name |> Path.explode
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    25
    val _ = File.write path ""
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    26
    val facts = all_non_tautological_facts_of thy
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    27
    val (new_facts, old_facts) =
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    28
      facts |> List.partition (has_thy thy o snd)
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    29
            |>> sort (thm_ord o pairself snd)
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    30
    val ths = facts |> map snd
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    31
    val all_names = ths |> map Thm.get_name_hint
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    32
    fun do_fact ((_, (_, status)), th) prevs =
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    33
      let
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    34
        val name = Thm.get_name_hint th
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    35
        val feats = features_of thy (status, th)
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    36
        val deps = isabelle_dependencies_of all_names th
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    37
        val kind = Thm.legacy_get_kind th
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    38
        val name = fact_name_of name
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    39
        val core =
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    40
          name ^ ": " ^ space_implode " " prevs ^ "; " ^ space_implode " " feats
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    41
        val query = if kind <> "" then "? " ^ core ^ "\n" else ""
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    42
        val update = "! " ^ core ^ "; " ^ space_implode " " deps ^ "\n"
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    43
        val _ = File.append path (query ^ update)
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    44
      in [name] end
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    45
    val thy_ths = old_facts |> thms_by_thy
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    46
    val parents = parent_thms thy_ths thy
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    47
  in fold do_fact new_facts parents; () end
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    48
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    49
fun generate_iter_suggestions ctxt params thy max_relevant file_name =
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    50
  let
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    51
    val path = file_name |> Path.explode
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    52
    val _ = File.write path ""
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    53
    val facts = all_non_tautological_facts_of thy
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    54
    val (new_facts, old_facts) =
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    55
      facts |> List.partition (has_thy thy o snd)
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    56
            |>> sort (thm_ord o pairself snd)
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    57
    fun do_fact (fact as (_, th)) old_facts =
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    58
      let
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    59
        val name = Thm.get_name_hint th
48250
1065c307fafe further ML structure split to permit finer-grained loading/reordering (problem to solve: MaSh needs most of Sledgehammer)
blanchet
parents: 48246
diff changeset
    60
        val goal = goal_of_thm thy th
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    61
        val kind = Thm.legacy_get_kind th
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    62
        val _ =
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    63
          if kind <> "" then
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    64
            let
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    65
              val suggs =
48251
6cdcfbddc077 moved most of MaSh exporter code to Sledgehammer
blanchet
parents: 48250
diff changeset
    66
                old_facts |> iter_facts ctxt params max_relevant goal
48289
6b65f1ad0e4b systematize lazy names in relevance filter
blanchet
parents: 48251
diff changeset
    67
                          |> map (fn ((name, _), _) => fact_name_of (name ()))
48246
fb11c09d7729 add Isabelle dependencies to tweak relevance filter
blanchet
parents: 48245
diff changeset
    68
                          |> sort string_ord
48239
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    69
              val s = fact_name_of name ^ ": " ^ space_implode " " suggs ^ "\n"
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    70
            in File.append path s end
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    71
          else
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    72
            ()
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    73
      in fact :: old_facts end
0016290f904c generate Meng--Paulson facts for evaluation purposes
blanchet
parents: 48235
diff changeset
    74
  in fold do_fact new_facts old_facts; () end
48234
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    75
06216c789ac9 moved MaSh into own files
blanchet
parents:
diff changeset
    76
end;