author | wenzelm |
Mon, 11 Sep 2023 19:30:48 +0200 | |
changeset 78659 | b5f3d1051b13 |
parent 70839 | 2136e4670ad2 |
child 80295 | 8a9588ffc133 |
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> |
64986 | 23 |
val thm = @{thm ex}; |
24 |
||
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
25 |
(*proof body with digest*) |
70830 | 26 |
val body = Proofterm.strip_thm_body (Thm.proof_body_of thm); |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
27 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
28 |
(*proof term only*) |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
29 |
val prf = Proofterm.proof_of body; |
64986 | 30 |
|
31 |
(*clean output*) |
|
70839
2136e4670ad2
clarified standard_proof_of: prefer expand_proof over somewhat adhoc strip_thm_proof;
wenzelm
parents:
70830
diff
changeset
|
32 |
Pretty.writeln (Proof_Syntax.pretty_standard_proof_of \<^context> false thm); |
2136e4670ad2
clarified standard_proof_of: prefer expand_proof over somewhat adhoc strip_thm_proof;
wenzelm
parents:
70830
diff
changeset
|
33 |
Pretty.writeln (Proof_Syntax.pretty_standard_proof_of \<^context> true thm); |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
34 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
35 |
(*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
|
36 |
val all_thms = |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
37 |
Proofterm.fold_body_thms |
67405
e9ab4ad7bd15
uniform use of Standard ML op-infix -- eliminated warnings;
wenzelm
parents:
67399
diff
changeset
|
38 |
(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
|
39 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
40 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
41 |
text \<open> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
42 |
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
|
43 |
HOL.impI}, @{thm [source] HOL.conjE}, @{thm [source] HOL.conjI} etc. The |
69597 | 44 |
combinator \<^ML>\<open>Proofterm.fold_body_thms\<close> recursively explores the graph of |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
45 |
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
|
46 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
47 |
\<^medskip> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
48 |
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
|
49 |
theorem as follows: |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
50 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
51 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
52 |
ML_val \<open> |
69597 | 53 |
val thy = \<^theory>; |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
54 |
val prf = |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
55 |
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
|
56 |
"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
|
57 |
\ (\<^bold>\<lambda>H: _. \ |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
58 |
\ 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
|
59 |
\ (\<^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
|
60 |
val thm = |
70449 | 61 |
Proofterm.reconstruct_proof thy \<^prop>\<open>A \<and> B \<longrightarrow> B \<and> A\<close> prf |
62363
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
62 |
|> 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
|
63 |
|> 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
|
64 |
\<close> |
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
65 |
|
7b5468422352
moved examples to avoid dependency on bulky HOL-Proofs session, e.g. relevant for "isabelle makedist";
wenzelm
parents:
diff
changeset
|
66 |
end |