| author | wenzelm | 
| Mon, 22 Jun 2015 20:36:33 +0200 | |
| changeset 60555 | 51a6997b1384 | 
| parent 60448 | 78f3c67bc35e | 
| child 60623 | be39fe6c5620 | 
| permissions | -rw-r--r-- | 
| 
48929
 
05d4e5f660ae
entity markup for theory Pure, to enable hyperlinks etc.;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
1  | 
(* Title: Pure/Pure.thy  | 
| 
 
05d4e5f660ae
entity markup for theory Pure, to enable hyperlinks etc.;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
2  | 
Author: Makarius  | 
| 
 
05d4e5f660ae
entity markup for theory Pure, to enable hyperlinks etc.;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
3  | 
|
| 
 
05d4e5f660ae
entity markup for theory Pure, to enable hyperlinks etc.;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
4  | 
Final stage of bootstrapping Pure, based on implicit background theory.  | 
| 
 
05d4e5f660ae
entity markup for theory Pure, to enable hyperlinks etc.;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
5  | 
*)  | 
| 
 
05d4e5f660ae
entity markup for theory Pure, to enable hyperlinks etc.;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
6  | 
|
| 48638 | 7  | 
theory Pure  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
8  | 
keywords  | 
| 
58928
 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 
wenzelm 
parents: 
58918 
diff
changeset
 | 
9  | 
"!!" "!" "+" "--" ":" ";" "<" "<=" "=" "=>" "?" "[" "\<equiv>"  | 
| 
 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 
wenzelm 
parents: 
58918 
diff
changeset
 | 
10  | 
"\<leftharpoondown>" "\<rightharpoonup>" "\<rightleftharpoons>"  | 
| 
 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 
wenzelm 
parents: 
58918 
diff
changeset
 | 
11  | 
"\<subseteq>" "]" "assumes" "attach" "binder" "constrains"  | 
| 
 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 
wenzelm 
parents: 
58918 
diff
changeset
 | 
12  | 
"defines" "fixes" "for" "identifier" "if" "in" "includes" "infix"  | 
| 
 
23d0ffd48006
plain value Keywords.keywords, which might be used outside theory for bootstrap purposes;
 
wenzelm 
parents: 
58918 
diff
changeset
 | 
13  | 
"infixl" "infixr" "is" "notes" "obtains" "open" "output"  | 
| 
59990
 
a81dc82ecba3
clarified keyword 'qualified' in accordance to a similar keyword from Haskell (despite unrelated Binding.qualified in Isabelle/ML);
 
wenzelm 
parents: 
59939 
diff
changeset
 | 
14  | 
"overloaded" "pervasive" "private" "qualified" "shows"  | 
| 
60555
 
51a6997b1384
support 'when' statement, which corresponds to 'presume';
 
wenzelm 
parents: 
60448 
diff
changeset
 | 
15  | 
"structure" "unchecked" "where" "when" "|"  | 
| 
58999
 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 
wenzelm 
parents: 
58928 
diff
changeset
 | 
16  | 
and "text" "txt" :: document_body  | 
| 
 
ed09ae4ea2d8
uniform treatment of all document markup commands: 'text' and 'txt' merely differ in LaTeX style;
 
wenzelm 
parents: 
58928 
diff
changeset
 | 
17  | 
and "text_raw" :: document_raw  | 
| 57506 | 18  | 
and "default_sort" :: thy_decl == ""  | 
19  | 
and "typedecl" "type_synonym" "nonterminal" "judgment"  | 
|
| 
55385
 
169e12bbf9a3
discontinued axiomatic 'classes', 'classrel', 'arities';
 
wenzelm 
parents: 
55152 
diff
changeset
 | 
20  | 
"consts" "syntax" "no_syntax" "translations" "no_translations" "defs"  | 
| 
 
169e12bbf9a3
discontinued axiomatic 'classes', 'classrel', 'arities';
 
wenzelm 
parents: 
55152 
diff
changeset
 | 
21  | 
"definition" "abbreviation" "type_notation" "no_type_notation" "notation"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
22  | 
"no_notation" "axiomatization" "theorems" "lemmas" "declare"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
23  | 
"hide_class" "hide_type" "hide_const" "hide_fact" :: thy_decl  | 
| 58918 | 24  | 
and "SML_file" :: thy_load % "ML"  | 
| 
56618
 
874bdedb2313
added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
 
wenzelm 
parents: 
56275 
diff
changeset
 | 
25  | 
and "SML_import" "SML_export" :: thy_decl % "ML"  | 
| 51295 | 26  | 
and "ML" :: thy_decl % "ML"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
27  | 
and "ML_prf" :: prf_decl % "proof" (* FIXME % "ML" ?? *)  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
28  | 
and "ML_val" "ML_command" :: diag % "ML"  | 
| 
55762
 
27a45aec67a0
suppress completion of obscure keyword, avoid confusion with plain "simp";
 
wenzelm 
parents: 
55516 
diff
changeset
 | 
29  | 
and "simproc_setup" :: thy_decl % "ML" == ""  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
30  | 
and "setup" "local_setup" "attribute_setup" "method_setup"  | 
| 
55762
 
27a45aec67a0
suppress completion of obscure keyword, avoid confusion with plain "simp";
 
wenzelm 
parents: 
55516 
diff
changeset
 | 
31  | 
"declaration" "syntax_declaration"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
32  | 
"parse_ast_translation" "parse_translation" "print_translation"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
33  | 
"typed_print_translation" "print_ast_translation" "oracle" :: thy_decl % "ML"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
34  | 
and "bundle" :: thy_decl  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
35  | 
and "include" "including" :: prf_decl  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
36  | 
and "print_bundles" :: diag  | 
| 59901 | 37  | 
and "context" "locale" "experiment" :: thy_decl_block  | 
| 
51224
 
c3e99efacb67
back to non-schematic 'sublocale' and 'interpretation' (despite df8fc0567a3d) for more potential parallelism;
 
wenzelm 
parents: 
50603 
diff
changeset
 | 
38  | 
and "sublocale" "interpretation" :: thy_goal  | 
| 
 
c3e99efacb67
back to non-schematic 'sublocale' and 'interpretation' (despite df8fc0567a3d) for more potential parallelism;
 
wenzelm 
parents: 
50603 
diff
changeset
 | 
39  | 
and "interpret" :: prf_goal % "proof"  | 
| 
58800
 
bfed1c26caed
explicit keyword category for commands that may start a block;
 
wenzelm 
parents: 
58660 
diff
changeset
 | 
40  | 
and "class" :: thy_decl_block  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
41  | 
and "subclass" :: thy_goal  | 
| 
58800
 
bfed1c26caed
explicit keyword category for commands that may start a block;
 
wenzelm 
parents: 
58660 
diff
changeset
 | 
42  | 
and "instantiation" :: thy_decl_block  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
43  | 
and "instance" :: thy_goal  | 
| 
58800
 
bfed1c26caed
explicit keyword category for commands that may start a block;
 
wenzelm 
parents: 
58660 
diff
changeset
 | 
44  | 
and "overloading" :: thy_decl_block  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
45  | 
and "code_datatype" :: thy_decl  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
46  | 
and "theorem" "lemma" "corollary" :: thy_goal  | 
| 
51274
 
cfc83ad52571
discontinued pointless command category "thy_schematic_goal" -- this is checked dynamically;
 
wenzelm 
parents: 
51270 
diff
changeset
 | 
47  | 
and "schematic_theorem" "schematic_lemma" "schematic_corollary" :: thy_goal  | 
| 
58800
 
bfed1c26caed
explicit keyword category for commands that may start a block;
 
wenzelm 
parents: 
58660 
diff
changeset
 | 
48  | 
and "notepad" :: thy_decl_block  | 
| 
50128
 
599c935aac82
alternative completion for outer syntax keywords;
 
wenzelm 
parents: 
49569 
diff
changeset
 | 
49  | 
and "have" :: prf_goal % "proof"  | 
| 
 
599c935aac82
alternative completion for outer syntax keywords;
 
wenzelm 
parents: 
49569 
diff
changeset
 | 
50  | 
and "hence" :: prf_goal % "proof" == "then have"  | 
| 
 
599c935aac82
alternative completion for outer syntax keywords;
 
wenzelm 
parents: 
49569 
diff
changeset
 | 
51  | 
and "show" :: prf_asm_goal % "proof"  | 
| 
 
599c935aac82
alternative completion for outer syntax keywords;
 
wenzelm 
parents: 
49569 
diff
changeset
 | 
52  | 
and "thus" :: prf_asm_goal % "proof" == "then show"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
53  | 
and "then" "from" "with" :: prf_chain % "proof"  | 
| 60371 | 54  | 
and "note" :: prf_decl % "proof"  | 
55  | 
and "supply" :: prf_script % "proof"  | 
|
56  | 
and "using" "unfolding" :: prf_decl % "proof"  | 
|
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
57  | 
and "fix" "assume" "presume" "def" :: prf_asm % "proof"  | 
| 60448 | 58  | 
and "consider" :: prf_goal % "proof"  | 
| 
53371
 
47b23c582127
more explicit indication of 'guess' as improper Isar (aka "script") element;
 
wenzelm 
parents: 
52549 
diff
changeset
 | 
59  | 
and "obtain" :: prf_asm_goal % "proof"  | 
| 
 
47b23c582127
more explicit indication of 'guess' as improper Isar (aka "script") element;
 
wenzelm 
parents: 
52549 
diff
changeset
 | 
60  | 
and "guess" :: prf_asm_goal_script % "proof"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
61  | 
and "let" "write" :: prf_decl % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
62  | 
and "case" :: prf_asm % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
63  | 
  and "{" :: prf_open % "proof"
 | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
64  | 
and "}" :: prf_close % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
65  | 
and "next" :: prf_block % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
66  | 
and "qed" :: qed_block % "proof"  | 
| 
53571
 
e58ca0311c0f
more explicit indication of 'done' as proof script element;
 
wenzelm 
parents: 
53371 
diff
changeset
 | 
67  | 
and "by" ".." "." "sorry" :: "qed" % "proof"  | 
| 
 
e58ca0311c0f
more explicit indication of 'done' as proof script element;
 
wenzelm 
parents: 
53371 
diff
changeset
 | 
68  | 
and "done" :: "qed_script" % "proof"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
69  | 
and "oops" :: qed_global % "proof"  | 
| 
50128
 
599c935aac82
alternative completion for outer syntax keywords;
 
wenzelm 
parents: 
49569 
diff
changeset
 | 
70  | 
and "defer" "prefer" "apply" :: prf_script % "proof"  | 
| 
 
599c935aac82
alternative completion for outer syntax keywords;
 
wenzelm 
parents: 
49569 
diff
changeset
 | 
71  | 
and "apply_end" :: prf_script % "proof" == ""  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
72  | 
and "proof" :: prf_block % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
73  | 
and "also" "moreover" :: prf_decl % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
74  | 
and "finally" "ultimately" :: prf_chain % "proof"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
75  | 
and "back" :: prf_script % "proof"  | 
| 
56069
 
451d5b73f8cf
simplified programming interface to define ML antiquotations -- NB: the transformed context ignores updates of the context parser;
 
wenzelm 
parents: 
55762 
diff
changeset
 | 
76  | 
and "help" "print_commands" "print_options" "print_context"  | 
| 
 
451d5b73f8cf
simplified programming interface to define ML antiquotations -- NB: the transformed context ignores updates of the context parser;
 
wenzelm 
parents: 
55762 
diff
changeset
 | 
77  | 
"print_theory" "print_syntax" "print_abbrevs" "print_defn_rules"  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
78  | 
"print_theorems" "print_locales" "print_classes" "print_locale"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
79  | 
"print_interps" "print_dependencies" "print_attributes"  | 
| 
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
80  | 
"print_simpset" "print_rules" "print_trans_rules" "print_methods"  | 
| 
56069
 
451d5b73f8cf
simplified programming interface to define ML antiquotations -- NB: the transformed context ignores updates of the context parser;
 
wenzelm 
parents: 
55762 
diff
changeset
 | 
81  | 
"print_antiquotations" "print_ML_antiquotations" "thy_deps"  | 
| 58845 | 82  | 
"locale_deps" "class_deps" "thm_deps" "print_term_bindings"  | 
| 
57415
 
e721124f1b1e
command 'print_term_bindings' supersedes 'print_binds';
 
wenzelm 
parents: 
56864 
diff
changeset
 | 
83  | 
"print_facts" "print_cases" "print_statement" "thm" "prf" "full_prf"  | 
| 
 
e721124f1b1e
command 'print_term_bindings' supersedes 'print_binds';
 
wenzelm 
parents: 
56864 
diff
changeset
 | 
84  | 
"prop" "term" "typ" "print_codesetup" "unused_thms" :: diag  | 
| 58845 | 85  | 
and "display_drafts" "print_state" :: diag  | 
| 
48646
 
91281e9472d8
more official command specifications, including source position;
 
wenzelm 
parents: 
48641 
diff
changeset
 | 
86  | 
and "welcome" :: diag  | 
| 
48641
 
92b48b8abfe4
more standard bootstrapping of Pure outer syntax;
 
wenzelm 
parents: 
48638 
diff
changeset
 | 
87  | 
and "end" :: thy_end % "theory"  | 
| 56797 | 88  | 
and "realizers" :: thy_decl == ""  | 
89  | 
and "realizability" :: thy_decl == ""  | 
|
90  | 
and "extract_type" "extract" :: thy_decl  | 
|
| 
48646
 
91281e9472d8
more official command specifications, including source position;
 
wenzelm 
parents: 
48641 
diff
changeset
 | 
91  | 
and "find_theorems" "find_consts" :: diag  | 
| 
57886
 
7cae177c9084
support for named collections of theorems in canonical order;
 
wenzelm 
parents: 
57506 
diff
changeset
 | 
92  | 
and "named_theorems" :: thy_decl  | 
| 48638 | 93  | 
begin  | 
| 15803 | 94  | 
|
| 56205 | 95  | 
ML_file "ML/ml_antiquotations.ML"  | 
| 55516 | 96  | 
ML_file "ML/ml_thms.ML"  | 
| 56864 | 97  | 
ML_file "Tools/print_operation.ML"  | 
| 48891 | 98  | 
ML_file "Isar/isar_syn.ML"  | 
| 55141 | 99  | 
ML_file "Isar/calculation.ML"  | 
| 
58544
 
340f130b3d38
bibtex support in ML: document antiquotation @{cite} with markup;
 
wenzelm 
parents: 
58201 
diff
changeset
 | 
100  | 
ML_file "Tools/bibtex.ML"  | 
| 55030 | 101  | 
ML_file "Tools/rail.ML"  | 
| 58860 | 102  | 
ML_file "Tools/rule_insts.ML"  | 
103  | 
ML_file "Tools/thm_deps.ML"  | 
|
| 60093 | 104  | 
ML_file "Tools/thy_deps.ML"  | 
| 58201 | 105  | 
ML_file "Tools/class_deps.ML"  | 
| 48891 | 106  | 
ML_file "Tools/find_theorems.ML"  | 
107  | 
ML_file "Tools/find_consts.ML"  | 
|
| 54730 | 108  | 
ML_file "Tools/simplifier_trace.ML"  | 
| 
57886
 
7cae177c9084
support for named collections of theorems in canonical order;
 
wenzelm 
parents: 
57506 
diff
changeset
 | 
109  | 
ML_file "Tools/named_theorems.ML"  | 
| 48891 | 110  | 
|
111  | 
||
| 58611 | 112  | 
section \<open>Basic attributes\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
113  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
114  | 
attribute_setup tagged =  | 
| 58611 | 115  | 
\<open>Scan.lift (Args.name -- Args.name) >> Thm.tag\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
116  | 
"tagged theorem"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
117  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
118  | 
attribute_setup untagged =  | 
| 58611 | 119  | 
\<open>Scan.lift Args.name >> Thm.untag\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
120  | 
"untagged theorem"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
121  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
122  | 
attribute_setup kind =  | 
| 58611 | 123  | 
\<open>Scan.lift Args.name >> Thm.kind\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
124  | 
"theorem kind"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
125  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
126  | 
attribute_setup THEN =  | 
| 58611 | 127  | 
\<open>Scan.lift (Scan.optional (Args.bracks Parse.nat) 1) -- Attrib.thm  | 
128  | 
>> (fn (i, B) => Thm.rule_attribute (fn _ => fn A => A RSN (i, B)))\<close>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
129  | 
"resolution with rule"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
130  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
131  | 
attribute_setup OF =  | 
| 58611 | 132  | 
\<open>Attrib.thms >> (fn Bs => Thm.rule_attribute (fn _ => fn A => A OF Bs))\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
133  | 
"rule resolved with facts"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
134  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
135  | 
attribute_setup rename_abs =  | 
| 58611 | 136  | 
\<open>Scan.lift (Scan.repeat (Args.maybe Args.name)) >> (fn vs =>  | 
137  | 
Thm.rule_attribute (K (Drule.rename_bvars' vs)))\<close>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
138  | 
"rename bound variables in abstractions"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
139  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
140  | 
attribute_setup unfolded =  | 
| 58611 | 141  | 
\<open>Attrib.thms >> (fn ths =>  | 
142  | 
Thm.rule_attribute (fn context => Local_Defs.unfold (Context.proof_of context) ths))\<close>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
143  | 
"unfolded definitions"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
144  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
145  | 
attribute_setup folded =  | 
| 58611 | 146  | 
\<open>Attrib.thms >> (fn ths =>  | 
147  | 
Thm.rule_attribute (fn context => Local_Defs.fold (Context.proof_of context) ths))\<close>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
148  | 
"folded definitions"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
149  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
150  | 
attribute_setup consumes =  | 
| 58611 | 151  | 
\<open>Scan.lift (Scan.optional Parse.int 1) >> Rule_Cases.consumes\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
152  | 
"number of consumed facts"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
153  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
154  | 
attribute_setup constraints =  | 
| 58611 | 155  | 
\<open>Scan.lift Parse.nat >> Rule_Cases.constraints\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
156  | 
"number of equality constraints"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
157  | 
|
| 58611 | 158  | 
attribute_setup case_names =  | 
159  | 
\<open>Scan.lift (Scan.repeat1 (Args.name --  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
160  | 
    Scan.optional (@{keyword "["} |-- Scan.repeat1 (Args.maybe Args.name) --| @{keyword "]"}) []))
 | 
| 58611 | 161  | 
>> (fn cs =>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
162  | 
Rule_Cases.cases_hyp_names  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
163  | 
(map #1 cs)  | 
| 58611 | 164  | 
(map (map (the_default Rule_Cases.case_hypsN) o #2) cs))\<close>  | 
165  | 
"named rule cases"  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
166  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
167  | 
attribute_setup case_conclusion =  | 
| 58611 | 168  | 
\<open>Scan.lift (Args.name -- Scan.repeat Args.name) >> Rule_Cases.case_conclusion\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
169  | 
"named conclusion of rule cases"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
170  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
171  | 
attribute_setup params =  | 
| 58611 | 172  | 
\<open>Scan.lift (Parse.and_list1 (Scan.repeat Args.name)) >> Rule_Cases.params\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
173  | 
"named rule parameters"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
174  | 
|
| 58611 | 175  | 
attribute_setup rule_format =  | 
176  | 
\<open>Scan.lift (Args.mode "no_asm")  | 
|
177  | 
>> (fn true => Object_Logic.rule_format_no_asm | false => Object_Logic.rule_format)\<close>  | 
|
178  | 
"result put into canonical rule format"  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
179  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
180  | 
attribute_setup elim_format =  | 
| 58611 | 181  | 
\<open>Scan.succeed (Thm.rule_attribute (K Tactic.make_elim))\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
182  | 
"destruct rule turned into elimination rule format"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
183  | 
|
| 58611 | 184  | 
attribute_setup no_vars =  | 
185  | 
\<open>Scan.succeed (Thm.rule_attribute (fn context => fn th =>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
186  | 
let  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
187  | 
val ctxt = Variable.set_body false (Context.proof_of context);  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
188  | 
val ((_, [th']), _) = Variable.import true [th] ctxt;  | 
| 58611 | 189  | 
in th' end))\<close>  | 
190  | 
"imported schematic variables"  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
191  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
192  | 
attribute_setup atomize =  | 
| 58611 | 193  | 
\<open>Scan.succeed Object_Logic.declare_atomize\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
194  | 
"declaration of atomize rule"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
195  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
196  | 
attribute_setup rulify =  | 
| 58611 | 197  | 
\<open>Scan.succeed Object_Logic.declare_rulify\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
198  | 
"declaration of rulify rule"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
199  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
200  | 
attribute_setup rotated =  | 
| 58611 | 201  | 
\<open>Scan.lift (Scan.optional Parse.int 1  | 
202  | 
>> (fn n => Thm.rule_attribute (fn _ => rotate_prems n)))\<close>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
203  | 
"rotated theorem premises"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
204  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
205  | 
attribute_setup defn =  | 
| 58611 | 206  | 
\<open>Attrib.add_del Local_Defs.defn_add Local_Defs.defn_del\<close>  | 
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
207  | 
"declaration of definitional transformations"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
208  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
209  | 
attribute_setup abs_def =  | 
| 58611 | 210  | 
\<open>Scan.succeed (Thm.rule_attribute (fn context =>  | 
211  | 
Local_Defs.meta_rewrite_rule (Context.proof_of context) #> Drule.abs_def))\<close>  | 
|
| 
55140
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
212  | 
"abstract over free variables of definitional theorem"  | 
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
213  | 
|
| 
 
7eb0c04e4c40
define basic attributes in user-space Pure.thy -- which provides better hyperlinks and may serve as example;
 
wenzelm 
parents: 
55030 
diff
changeset
 | 
214  | 
|
| 58611 | 215  | 
section \<open>Further content for the Pure theory\<close>  | 
| 20627 | 216  | 
|
| 58611 | 217  | 
subsection \<open>Meta-level connectives in assumptions\<close>  | 
| 15803 | 218  | 
|
219  | 
lemma meta_mp:  | 
|
| 58612 | 220  | 
assumes "PROP P \<Longrightarrow> PROP Q" and "PROP P"  | 
| 15803 | 221  | 
shows "PROP Q"  | 
| 58612 | 222  | 
by (rule \<open>PROP P \<Longrightarrow> PROP Q\<close> [OF \<open>PROP P\<close>])  | 
| 15803 | 223  | 
|
| 23432 | 224  | 
lemmas meta_impE = meta_mp [elim_format]  | 
225  | 
||
| 15803 | 226  | 
lemma meta_spec:  | 
| 58612 | 227  | 
assumes "\<And>x. PROP P x"  | 
| 26958 | 228  | 
shows "PROP P x"  | 
| 58612 | 229  | 
by (rule \<open>\<And>x. PROP P x\<close>)  | 
| 15803 | 230  | 
|
231  | 
lemmas meta_allE = meta_spec [elim_format]  | 
|
232  | 
||
| 26570 | 233  | 
lemma swap_params:  | 
| 58612 | 234  | 
"(\<And>x y. PROP P x y) \<equiv> (\<And>y x. PROP P x y)" ..  | 
| 26570 | 235  | 
|
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
236  | 
|
| 58611 | 237  | 
subsection \<open>Meta-level conjunction\<close>  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
238  | 
|
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
239  | 
lemma all_conjunction:  | 
| 58612 | 240  | 
"(\<And>x. PROP A x &&& PROP B x) \<equiv> ((\<And>x. PROP A x) &&& (\<And>x. PROP B x))"  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
241  | 
proof  | 
| 58612 | 242  | 
assume conj: "\<And>x. PROP A x &&& PROP B x"  | 
243  | 
show "(\<And>x. PROP A x) &&& (\<And>x. PROP B x)"  | 
|
| 19121 | 244  | 
proof -  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
245  | 
fix x  | 
| 26958 | 246  | 
from conj show "PROP A x" by (rule conjunctionD1)  | 
247  | 
from conj show "PROP B x" by (rule conjunctionD2)  | 
|
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
248  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
249  | 
next  | 
| 58612 | 250  | 
assume conj: "(\<And>x. PROP A x) &&& (\<And>x. PROP B x)"  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
251  | 
fix x  | 
| 
28856
 
5e009a80fe6d
Pure syntax: more coherent treatment of aprop, permanent TERM and &&&;
 
wenzelm 
parents: 
28699 
diff
changeset
 | 
252  | 
show "PROP A x &&& PROP B x"  | 
| 19121 | 253  | 
proof -  | 
| 26958 | 254  | 
show "PROP A x" by (rule conj [THEN conjunctionD1, rule_format])  | 
255  | 
show "PROP B x" by (rule conj [THEN conjunctionD2, rule_format])  | 
|
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
256  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
257  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
258  | 
|
| 19121 | 259  | 
lemma imp_conjunction:  | 
| 58612 | 260  | 
"(PROP A \<Longrightarrow> PROP B &&& PROP C) \<equiv> ((PROP A \<Longrightarrow> PROP B) &&& (PROP A \<Longrightarrow> PROP C))"  | 
| 18836 | 261  | 
proof  | 
| 58612 | 262  | 
assume conj: "PROP A \<Longrightarrow> PROP B &&& PROP C"  | 
263  | 
show "(PROP A \<Longrightarrow> PROP B) &&& (PROP A \<Longrightarrow> PROP C)"  | 
|
| 19121 | 264  | 
proof -  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
265  | 
assume "PROP A"  | 
| 58611 | 266  | 
from conj [OF \<open>PROP A\<close>] show "PROP B" by (rule conjunctionD1)  | 
267  | 
from conj [OF \<open>PROP A\<close>] show "PROP C" by (rule conjunctionD2)  | 
|
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
268  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
269  | 
next  | 
| 58612 | 270  | 
assume conj: "(PROP A \<Longrightarrow> PROP B) &&& (PROP A \<Longrightarrow> PROP C)"  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
271  | 
assume "PROP A"  | 
| 
28856
 
5e009a80fe6d
Pure syntax: more coherent treatment of aprop, permanent TERM and &&&;
 
wenzelm 
parents: 
28699 
diff
changeset
 | 
272  | 
show "PROP B &&& PROP C"  | 
| 19121 | 273  | 
proof -  | 
| 58611 | 274  | 
from \<open>PROP A\<close> show "PROP B" by (rule conj [THEN conjunctionD1])  | 
275  | 
from \<open>PROP A\<close> show "PROP C" by (rule conj [THEN conjunctionD2])  | 
|
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
276  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
277  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
278  | 
|
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
279  | 
lemma conjunction_imp:  | 
| 58612 | 280  | 
"(PROP A &&& PROP B \<Longrightarrow> PROP C) \<equiv> (PROP A \<Longrightarrow> PROP B \<Longrightarrow> PROP C)"  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
281  | 
proof  | 
| 58612 | 282  | 
assume r: "PROP A &&& PROP B \<Longrightarrow> PROP C"  | 
| 22933 | 283  | 
assume ab: "PROP A" "PROP B"  | 
284  | 
show "PROP C"  | 
|
285  | 
proof (rule r)  | 
|
| 
28856
 
5e009a80fe6d
Pure syntax: more coherent treatment of aprop, permanent TERM and &&&;
 
wenzelm 
parents: 
28699 
diff
changeset
 | 
286  | 
from ab show "PROP A &&& PROP B" .  | 
| 22933 | 287  | 
qed  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
288  | 
next  | 
| 58612 | 289  | 
assume r: "PROP A \<Longrightarrow> PROP B \<Longrightarrow> PROP C"  | 
| 
28856
 
5e009a80fe6d
Pure syntax: more coherent treatment of aprop, permanent TERM and &&&;
 
wenzelm 
parents: 
28699 
diff
changeset
 | 
290  | 
assume conj: "PROP A &&& PROP B"  | 
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
291  | 
show "PROP C"  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
292  | 
proof (rule r)  | 
| 19121 | 293  | 
from conj show "PROP A" by (rule conjunctionD1)  | 
294  | 
from conj show "PROP B" by (rule conjunctionD2)  | 
|
| 
18466
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
295  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
296  | 
qed  | 
| 
 
389a6f9c31f4
added locale meta_conjunction_syntax and various conjunction rules;
 
wenzelm 
parents: 
18019 
diff
changeset
 | 
297  | 
|
| 48638 | 298  | 
end  | 
299  |