| author | wenzelm | 
| Thu, 20 Feb 2014 14:17:28 +0100 | |
| changeset 55617 | 2c585bb9560c | 
| parent 55372 | 3662c44d018c | 
| child 56925 | 601edd9a6859 | 
| permissions | -rw-r--r-- | 
| 
30929
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
1  | 
(* Title: Tools/Code_Generator.thy  | 
| 
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
2  | 
Author: Florian Haftmann, TU Muenchen  | 
| 
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
3  | 
*)  | 
| 
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
4  | 
|
| 39911 | 5  | 
header {* Loading the code generator and related modules *}
 | 
| 
30929
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
7  | 
theory Code_Generator  | 
| 
33820
 
082d9bc6992d
load ML directly into theory Code_Generator (quickcheck also requires this);
 
wenzelm 
parents: 
33561 
diff
changeset
 | 
8  | 
imports Pure  | 
| 
46950
 
d0181abdbdac
declare command keywords via theory header, including strict checking outside Pure;
 
wenzelm 
parents: 
46947 
diff
changeset
 | 
9  | 
keywords  | 
| 
51275
 
3928173409e4
reconsider 'export_code' as "thy_decl" command due to its global side-effect on the file-system;
 
wenzelm 
parents: 
48891 
diff
changeset
 | 
10  | 
"value" "print_codeproc" "code_thms" "code_deps" :: diag and  | 
| 55372 | 11  | 
"export_code" "code_identifier" "code_printing" "code_reserved"  | 
| 
54890
 
cb892d835803
fundamental treatment of undefined vs. universally partial replaces code_abort
 
haftmann 
parents: 
52138 
diff
changeset
 | 
12  | 
"code_monad" "code_reflect" :: thy_decl and  | 
| 
46950
 
d0181abdbdac
declare command keywords via theory header, including strict checking outside Pure;
 
wenzelm 
parents: 
46947 
diff
changeset
 | 
13  | 
"datatypes" "functions" "module_name" "file" "checking"  | 
| 
52137
 
7f7337447b1b
use generic data for code symbols for unified "code_printing" syntax for custom serialisations
 
haftmann 
parents: 
52136 
diff
changeset
 | 
14  | 
"constant" "type_constructor" "type_class" "class_relation" "class_instance" "code_module"  | 
| 
30929
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
15  | 
begin  | 
| 
 
d9343c0aac11
code generator bootstrap theory src/Tools/Code_Generator.thy
 
haftmann 
parents:  
diff
changeset
 | 
16  | 
|
| 48891 | 17  | 
ML_file "~~/src/Tools/value.ML"  | 
18  | 
ML_file "~~/src/Tools/cache_io.ML"  | 
|
19  | 
ML_file "~~/src/Tools/Code/code_preproc.ML"  | 
|
| 52136 | 20  | 
ML_file "~~/src/Tools/Code/code_symbol.ML"  | 
| 48891 | 21  | 
ML_file "~~/src/Tools/Code/code_thingol.ML"  | 
22  | 
ML_file "~~/src/Tools/Code/code_simp.ML"  | 
|
23  | 
ML_file "~~/src/Tools/Code/code_printer.ML"  | 
|
24  | 
ML_file "~~/src/Tools/Code/code_target.ML"  | 
|
25  | 
ML_file "~~/src/Tools/Code/code_namespace.ML"  | 
|
26  | 
ML_file "~~/src/Tools/Code/code_ml.ML"  | 
|
27  | 
ML_file "~~/src/Tools/Code/code_haskell.ML"  | 
|
28  | 
ML_file "~~/src/Tools/Code/code_scala.ML"  | 
|
29  | 
||
| 39423 | 30  | 
setup {*
 | 
| 
47657
 
1ba213363d0c
moved modules with only vague relation to the code generator to theory HOL rather than theory Code_Generator
 
haftmann 
parents: 
47610 
diff
changeset
 | 
31  | 
Value.setup  | 
| 39423 | 32  | 
#> Code_Preproc.setup  | 
33  | 
#> Code_Simp.setup  | 
|
| 
43564
 
9864182c6bad
document antiquotations are managed as theory data, with proper name space and entity markup;
 
wenzelm 
parents: 
43018 
diff
changeset
 | 
34  | 
#> Code_Target.setup  | 
| 39423 | 35  | 
#> Code_ML.setup  | 
36  | 
#> Code_Haskell.setup  | 
|
37  | 
#> Code_Scala.setup  | 
|
38  | 
*}  | 
|
39  | 
||
| 
39421
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
40  | 
code_datatype "TYPE('a\<Colon>{})"
 | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
41  | 
|
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
42  | 
definition holds :: "prop" where  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
43  | 
"holds \<equiv> ((\<lambda>x::prop. x) \<equiv> (\<lambda>x. x))"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
44  | 
|
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
45  | 
lemma holds: "PROP holds"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
46  | 
by (unfold holds_def) (rule reflexive)  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
47  | 
|
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
48  | 
code_datatype holds  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
49  | 
|
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
50  | 
lemma implies_code [code]:  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
51  | 
"(PROP holds \<Longrightarrow> PROP P) \<equiv> PROP P"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
52  | 
"(PROP P \<Longrightarrow> PROP holds) \<equiv> PROP holds"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
53  | 
proof -  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
54  | 
show "(PROP holds \<Longrightarrow> PROP P) \<equiv> PROP P"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
55  | 
proof  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
56  | 
assume "PROP holds \<Longrightarrow> PROP P"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
57  | 
then show "PROP P" using holds .  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
58  | 
next  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
59  | 
assume "PROP P"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
60  | 
then show "PROP P" .  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
61  | 
qed  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
62  | 
next  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
63  | 
show "(PROP P \<Longrightarrow> PROP holds) \<equiv> PROP holds"  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
64  | 
by rule (rule holds)+  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
65  | 
qed  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
66  | 
|
| 48891 | 67  | 
ML_file "~~/src/Tools/Code/code_runtime.ML"  | 
68  | 
ML_file "~~/src/Tools/nbe.ML"  | 
|
| 39911 | 69  | 
setup Nbe.setup  | 
| 39474 | 70  | 
|
| 
39421
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
71  | 
hide_const (open) holds  | 
| 
 
b6a77cffc231
introduced "holds" as synthetic datatype constructor for "prop"; moved Pure code generator setup to Code_Generator.thy
 
haftmann 
parents: 
39401 
diff
changeset
 | 
72  | 
|
| 
33561
 
ab01b72715ef
introduced Auto Nitpick in addition to Auto Quickcheck;
 
blanchet 
parents: 
31775 
diff
changeset
 | 
73  | 
end  | 
| 
47657
 
1ba213363d0c
moved modules with only vague relation to the code generator to theory HOL rather than theory Code_Generator
 
haftmann 
parents: 
47610 
diff
changeset
 | 
74  |