equal
deleted
inserted
replaced
3 |
3 |
4 Check whether a newly stated theorem can be solved directly by an |
4 Check whether a newly stated theorem can be solved directly by an |
5 existing theorem. Duplicate lemmas can be detected in this way. |
5 existing theorem. Duplicate lemmas can be detected in this way. |
6 |
6 |
7 The implementation is based in part on Berghofer and Haftmann's |
7 The implementation is based in part on Berghofer and Haftmann's |
8 quickcheck.ML. It relies critically on the FindTheorems solves |
8 quickcheck.ML. It relies critically on the Find_Theorems solves |
9 feature. |
9 feature. |
10 *) |
10 *) |
11 |
11 |
12 signature AUTO_SOLVE = |
12 signature AUTO_SOLVE = |
13 sig |
13 sig |
43 |
43 |
44 val _ = Context.>> (Specification.add_theorem_hook (fn int => fn state => |
44 val _ = Context.>> (Specification.add_theorem_hook (fn int => fn state => |
45 let |
45 let |
46 val ctxt = Proof.context_of state; |
46 val ctxt = Proof.context_of state; |
47 |
47 |
48 val crits = [(true, FindTheorems.Solves)]; |
48 val crits = [(true, Find_Theorems.Solves)]; |
49 fun find g = snd (FindTheorems.find_theorems ctxt (SOME g) (SOME (! limit)) false crits); |
49 fun find g = snd (Find_Theorems.find_theorems ctxt (SOME g) (SOME (! limit)) false crits); |
50 |
50 |
51 fun prt_result (goal, results) = |
51 fun prt_result (goal, results) = |
52 let |
52 let |
53 val msg = |
53 val msg = |
54 (case goal of |
54 (case goal of |
55 NONE => "The current goal" |
55 NONE => "The current goal" |
56 | SOME sg => Syntax.string_of_term ctxt (Thm.term_of sg)); |
56 | SOME sg => Syntax.string_of_term ctxt (Thm.term_of sg)); |
57 in |
57 in |
58 Pretty.big_list |
58 Pretty.big_list |
59 (msg ^ " could be solved directly with:") |
59 (msg ^ " could be solved directly with:") |
60 (map (FindTheorems.pretty_thm ctxt) results) |
60 (map (Find_Theorems.pretty_thm ctxt) results) |
61 end; |
61 end; |
62 |
62 |
63 fun seek_against_goal () = |
63 fun seek_against_goal () = |
64 (case try Proof.simple_goal state of |
64 (case try Proof.simple_goal state of |
65 NONE => NONE |
65 NONE => NONE |