author | haftmann |
Wed, 21 Dec 2016 21:26:26 +0100 | |
changeset 64633 | 5ebcf6c525f1 |
parent 64572 | cec07f7249cd |
child 64986 | b81a048960a3 |
permissions | -rw-r--r-- |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
1 |
(* Title: HOL/Proofs/ex/Proof_Terms.thy |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
3 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
4 |
Basic examples involving proof terms. |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
5 |
*) |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
6 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
7 |
theory Proof_Terms |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
8 |
imports Main |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
9 |
begin |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
10 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
11 |
text \<open> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
12 |
Detailed proof information of a theorem may be retrieved as follows: |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
13 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
14 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
15 |
lemma ex: "A \<and> B \<longrightarrow> B \<and> A" |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
16 |
proof |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
17 |
assume "A \<and> B" |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
18 |
then obtain B and A .. |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
19 |
then show "B \<and> A" .. |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
20 |
qed |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
21 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
22 |
ML_val \<open> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
23 |
(*proof body with digest*) |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
24 |
val body = Proofterm.strip_thm (Thm.proof_body_of @{thm ex}); |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
25 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
26 |
(*proof term only*) |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
27 |
val prf = Proofterm.proof_of body; |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
28 |
Pretty.writeln (Proof_Syntax.pretty_proof @{context} prf); |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
29 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
30 |
(*all theorems used in the graph of nested proofs*) |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
31 |
val all_thms = |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
32 |
Proofterm.fold_body_thms |
64572 | 33 |
(fn {name, ...} => insert (op =) name) [body] []; |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
34 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
35 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
36 |
text \<open> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
37 |
The result refers to various basic facts of Isabelle/HOL: @{thm [source] |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
38 |
HOL.impI}, @{thm [source] HOL.conjE}, @{thm [source] HOL.conjI} etc. The |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
39 |
combinator @{ML Proofterm.fold_body_thms} recursively explores the graph of |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
40 |
the proofs of all theorems being used here. |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
41 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
42 |
\<^medskip> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
43 |
Alternatively, we may produce a proof term manually, and turn it into a |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
44 |
theorem as follows: |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
45 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
46 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
47 |
ML_val \<open> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
48 |
val thy = @{theory}; |
62922 | 49 |
val ctxt = @{context}; |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
50 |
val prf = |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
51 |
Proof_Syntax.read_proof thy true false |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
52 |
"impI \<cdot> _ \<cdot> _ \<bullet> \ |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
53 |
\ (\<^bold>\<lambda>H: _. \ |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
54 |
\ conjE \<cdot> _ \<cdot> _ \<cdot> _ \<bullet> H \<bullet> \ |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
55 |
\ (\<^bold>\<lambda>(H: _) Ha: _. conjI \<cdot> _ \<cdot> _ \<bullet> Ha \<bullet> H))"; |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
56 |
val thm = |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
57 |
prf |
62922 | 58 |
|> Reconstruct.reconstruct_proof ctxt @{prop "A \<and> B \<longrightarrow> B \<and> A"} |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
59 |
|> Proof_Checker.thm_of_proof thy |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
60 |
|> Drule.export_without_context; |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
61 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
62 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
63 |
end |