| author | wenzelm |
| Sat, 01 Feb 2014 21:43:23 +0100 | |
| changeset 55240 | efc4c0e0e14a |
| parent 55223 | 3c593bad6b31 |
| child 55243 | 66709d41601e |
| permissions | -rw-r--r-- |
|
55202
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
1 |
(* Title: HOL/Tools/Sledgehammer/sledgehammer_isar_minimize.ML |
| 54712 | 2 |
Author: Steffen Juilf Smolka, TU Muenchen |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
3 |
Author: Jasmin Blanchette, TU Muenchen |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
4 |
|
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
5 |
Minimize dependencies (used facts) of Isar proof steps. |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
6 |
*) |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
7 |
|
|
55202
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
8 |
signature SLEDGEHAMMER_ISAR_MINIMIZE = |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
9 |
sig |
|
55202
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
10 |
type isar_step = Sledgehammer_Isar_Proof.isar_step |
|
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
11 |
type isar_proof = Sledgehammer_Isar_Proof.isar_proof |
| 55213 | 12 |
type isar_preplay_data = Sledgehammer_Isar_Preplay.isar_preplay_data |
| 54712 | 13 |
|
| 55213 | 14 |
val minimize_isar_step_dependencies : isar_preplay_data -> isar_step -> isar_step |
15 |
val postprocess_isar_proof_remove_unreferenced_steps : (isar_step -> isar_step) -> isar_proof -> |
|
16 |
isar_proof |
|
| 54504 | 17 |
end; |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
18 |
|
|
55202
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
19 |
structure Sledgehammer_Isar_Minimize : SLEDGEHAMMER_ISAR_MINIMIZE = |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
20 |
struct |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
21 |
|
| 54828 | 22 |
open Sledgehammer_Reconstructor |
|
55202
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
23 |
open Sledgehammer_Isar_Proof |
|
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
24 |
open Sledgehammer_Isar_Preplay |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
25 |
|
| 54712 | 26 |
val slack = seconds 0.1 |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
27 |
|
| 55213 | 28 |
fun minimize_isar_step_dependencies (_ : isar_preplay_data) (step as Let _) = step |
| 55221 | 29 |
| minimize_isar_step_dependencies {preplay_outcome, set_preplay_outcome, preplay_quietly, ...}
|
|
55223
3c593bad6b31
generalized preplaying infrastructure to store various results for various methods
blanchet
parents:
55221
diff
changeset
|
30 |
(step as Prove (qs, xs, l, t, subproofs, ((lfs, gfs), methss as (meth :: _) :: _))) = |
|
3c593bad6b31
generalized preplaying infrastructure to store various results for various methods
blanchet
parents:
55221
diff
changeset
|
31 |
(case Lazy.force (preplay_outcome l meth) of |
| 54828 | 32 |
Played time => |
| 54712 | 33 |
let |
|
55223
3c593bad6b31
generalized preplaying infrastructure to store various results for various methods
blanchet
parents:
55221
diff
changeset
|
34 |
fun mk_step_lfs_gfs lfs gfs = Prove (qs, xs, l, t, subproofs, ((lfs, gfs), methss)) |
| 54712 | 35 |
val mk_step_gfs_lfs = curry (swap #> uncurry mk_step_lfs_gfs) |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
36 |
|
| 54712 | 37 |
fun minimize_facts _ time min_facts [] = (time, min_facts) |
38 |
| minimize_facts mk_step time min_facts (f :: facts) = |
|
39 |
(case preplay_quietly (Time.+ (time, slack)) (mk_step (min_facts @ facts)) of |
|
| 54828 | 40 |
Played time => minimize_facts mk_step time min_facts facts |
| 54827 | 41 |
| _ => minimize_facts mk_step time (f :: min_facts) facts) |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
42 |
|
| 54712 | 43 |
val (time, min_lfs) = minimize_facts (mk_step_gfs_lfs gfs) time [] lfs |
44 |
val (time, min_gfs) = minimize_facts (mk_step_lfs_gfs min_lfs) time [] gfs |
|
45 |
in |
|
|
55223
3c593bad6b31
generalized preplaying infrastructure to store various results for various methods
blanchet
parents:
55221
diff
changeset
|
46 |
set_preplay_outcome l meth (Played time); mk_step_lfs_gfs min_lfs min_gfs |
| 54826 | 47 |
end |
48 |
| _ => step (* don't touch steps that time out or fail *)) |
|
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
49 |
|
| 55213 | 50 |
fun postprocess_isar_proof_remove_unreferenced_steps postproc_step = |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
51 |
let |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
52 |
val add_lfs = fold (Ord_List.insert label_ord) |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
53 |
|
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
54 |
fun do_proof (Proof (fix, assms, steps)) = |
| 54712 | 55 |
let val (refed, steps) = do_steps steps in |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
56 |
(refed, Proof (fix, assms, steps)) |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
57 |
end |
| 54754 | 58 |
and do_steps [] = ([], []) |
59 |
| do_steps steps = |
|
| 55212 | 60 |
(* the last step is always implicitly referenced *) |
61 |
let val (steps, (refed, concl)) = split_last steps ||> do_refed_step in |
|
| 54754 | 62 |
fold_rev do_step steps (refed, [concl]) |
63 |
end |
|
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
64 |
and do_step step (refed, accu) = |
|
55223
3c593bad6b31
generalized preplaying infrastructure to store various results for various methods
blanchet
parents:
55221
diff
changeset
|
65 |
(case label_of_isar_step step of |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
66 |
NONE => (refed, step :: accu) |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
67 |
| SOME l => |
| 54813 | 68 |
if Ord_List.member label_ord refed l then |
69 |
do_refed_step step |
|
70 |
|>> Ord_List.union label_ord refed |
|
71 |
||> (fn x => x :: accu) |
|
72 |
else |
|
73 |
(refed, accu)) |
|
| 54712 | 74 |
and do_refed_step step = step |> postproc_step |> do_refed_step' |
|
55202
824c48a539c9
renamed many Sledgehammer ML files to clarify structure
blanchet
parents:
54828
diff
changeset
|
75 |
and do_refed_step' (Let _) = raise Fail "Sledgehammer_Isar_Minimize" |
| 54700 | 76 |
| do_refed_step' (Prove (qs, xs, l, t, subproofs, ((lfs, gfs), m))) = |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
77 |
let |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
78 |
val (refed, subproofs) = |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
79 |
map do_proof subproofs |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
80 |
|> split_list |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
81 |
|>> Ord_List.unions label_ord |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
82 |
|>> add_lfs lfs |
| 54700 | 83 |
val step = Prove (qs, xs, l, t, subproofs, ((lfs, gfs), m)) |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
84 |
in |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
85 |
(refed, step) |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
86 |
end |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
87 |
in |
| 54712 | 88 |
snd o do_proof |
|
52611
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
89 |
end |
|
831f7479c74f
minimize dependencies (used facts) of Isar proof steps; remove unreferenced steps
smolkas
parents:
diff
changeset
|
90 |
|
| 54504 | 91 |
end; |