author | blanchet |
Wed, 18 Jul 2012 08:44:03 +0200 | |
changeset 48289 | 6b65f1ad0e4b |
parent 48251 | 6cdcfbddc077 |
child 48292 | 7fcee834c7f5 |
permissions | -rw-r--r-- |
48234 | 1 |
(* Title: HOL/TPTP/mash_export.ML |
2 |
Author: Jasmin Blanchette, TU Muenchen |
|
3 |
Copyright 2012 |
|
4 |
||
5 |
Export Isabelle theory information for MaSh (Machine-learning for Sledgehammer). |
|
6 |
*) |
|
7 |
||
8 |
signature MASH_EXPORT = |
|
9 |
sig |
|
48251
6cdcfbddc077
moved most of MaSh exporter code to Sledgehammer
blanchet
parents:
48250
diff
changeset
|
10 |
type params = Sledgehammer_Provers.params |
48235 | 11 |
|
48245 | 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 | 15 |
end; |
16 |
||
17 |
structure MaSh_Export : MASH_EXPORT = |
|
18 |
struct |
|
19 |
||
48251
6cdcfbddc077
moved most of MaSh exporter code to Sledgehammer
blanchet
parents:
48250
diff
changeset
|
20 |
open Sledgehammer_Filter_MaSh |
48245 | 21 |
|
22 |
fun generate_commands thy file_name = |
|
48234 | 23 |
let |
24 |
val path = file_name |> Path.explode |
|
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 | 27 |
val (new_facts, old_facts) = |
28 |
facts |> List.partition (has_thy thy o snd) |
|
29 |
|>> sort (thm_ord o pairself snd) |
|
30 |
val ths = facts |> map snd |
|
31 |
val all_names = ths |> map Thm.get_name_hint |
|
32 |
fun do_fact ((_, (_, status)), th) prevs = |
|
33 |
let |
|
34 |
val name = Thm.get_name_hint th |
|
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 | 37 |
val kind = Thm.legacy_get_kind th |
38 |
val name = fact_name_of name |
|
39 |
val core = |
|
40 |
name ^ ": " ^ space_implode " " prevs ^ "; " ^ space_implode " " feats |
|
41 |
val query = if kind <> "" then "? " ^ core ^ "\n" else "" |
|
42 |
val update = "! " ^ core ^ "; " ^ space_implode " " deps ^ "\n" |
|
43 |
val _ = File.append path (query ^ update) |
|
44 |
in [name] end |
|
45 |
val thy_ths = old_facts |> thms_by_thy |
|
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 | 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 | 75 |
|
76 |
end; |