nipkow@10519
|
1 |
(* Title: HOL/Main.thy
|
nipkow@10519
|
2 |
ID: $Id$
|
webertj@14350
|
3 |
Author: Stefan Berghofer, Tobias Nipkow, Tjark Weber, Markus Wenzel (TU Muenchen)
|
nipkow@10519
|
4 |
*)
|
wenzelm@9619
|
5 |
|
wenzelm@12024
|
6 |
header {* Main HOL *}
|
wenzelm@9650
|
7 |
|
nipkow@15131
|
8 |
theory Main
|
paulson@15872
|
9 |
imports Refute Reconstruction
|
paulson@15151
|
10 |
|
nipkow@15131
|
11 |
begin
|
wenzelm@12024
|
12 |
|
wenzelm@12024
|
13 |
text {*
|
wenzelm@12024
|
14 |
Theory @{text Main} includes everything. Note that theory @{text
|
wenzelm@12024
|
15 |
PreList} already includes most HOL theories.
|
wenzelm@12024
|
16 |
*}
|
wenzelm@12024
|
17 |
|
wenzelm@12024
|
18 |
subsection {* Configuration of the code generator *}
|
berghofe@11533
|
19 |
|
berghofe@11533
|
20 |
types_code
|
berghofe@11533
|
21 |
"bool" ("bool")
|
berghofe@11533
|
22 |
|
berghofe@11533
|
23 |
consts_code
|
berghofe@11533
|
24 |
"True" ("true")
|
berghofe@11533
|
25 |
"False" ("false")
|
berghofe@11533
|
26 |
"Not" ("not")
|
berghofe@11533
|
27 |
"op |" ("(_ orelse/ _)")
|
berghofe@11533
|
28 |
"op &" ("(_ andalso/ _)")
|
berghofe@11533
|
29 |
"If" ("(if _/ then _/ else _)")
|
berghofe@11533
|
30 |
|
berghofe@13093
|
31 |
"wfrec" ("wf'_rec?")
|
berghofe@13093
|
32 |
|
berghofe@14102
|
33 |
quickcheck_params [default_type = int]
|
berghofe@14102
|
34 |
|
berghofe@13755
|
35 |
ML {*
|
berghofe@13755
|
36 |
fun wf_rec f x = f (wf_rec f) x;
|
berghofe@13755
|
37 |
|
berghofe@14102
|
38 |
fun term_of_bool b = if b then HOLogic.true_const else HOLogic.false_const;
|
berghofe@13755
|
39 |
val term_of_int = HOLogic.mk_int;
|
berghofe@14102
|
40 |
fun term_of_fun_type _ T _ U _ = Free ("<function>", T --> U);
|
berghofe@14102
|
41 |
|
berghofe@14102
|
42 |
val eq_codegen_setup = [Codegen.add_codegen "eq_codegen"
|
berghofe@14102
|
43 |
(fn thy => fn gr => fn dep => fn b => fn t =>
|
berghofe@14102
|
44 |
(case strip_comb t of
|
skalberg@15531
|
45 |
(Const ("op =", Type (_, [Type ("fun", _), _])), _) => NONE
|
berghofe@14102
|
46 |
| (Const ("op =", _), [t, u]) =>
|
berghofe@14102
|
47 |
let
|
berghofe@14102
|
48 |
val (gr', pt) = Codegen.invoke_codegen thy dep false (gr, t);
|
berghofe@14102
|
49 |
val (gr'', pu) = Codegen.invoke_codegen thy dep false (gr', u)
|
berghofe@14102
|
50 |
in
|
skalberg@15531
|
51 |
SOME (gr'', Codegen.parens
|
berghofe@14102
|
52 |
(Pretty.block [pt, Pretty.str " =", Pretty.brk 1, pu]))
|
berghofe@14102
|
53 |
end
|
skalberg@15531
|
54 |
| (t as Const ("op =", _), ts) => SOME (Codegen.invoke_codegen
|
berghofe@14102
|
55 |
thy dep b (gr, Codegen.eta_expand t ts 2))
|
skalberg@15531
|
56 |
| _ => NONE))];
|
berghofe@14102
|
57 |
|
berghofe@14102
|
58 |
fun gen_bool i = one_of [false, true];
|
berghofe@14102
|
59 |
|
berghofe@14102
|
60 |
fun gen_int i = one_of [~1, 1] * random_range 0 i;
|
berghofe@14102
|
61 |
|
berghofe@14102
|
62 |
fun gen_fun_type _ G i =
|
berghofe@14102
|
63 |
let
|
berghofe@14102
|
64 |
val f = ref (fn x => raise ERROR);
|
berghofe@14102
|
65 |
val _ = (f := (fn x =>
|
berghofe@14102
|
66 |
let
|
berghofe@14102
|
67 |
val y = G i;
|
berghofe@14102
|
68 |
val f' = !f
|
berghofe@14102
|
69 |
in (f := (fn x' => if x = x' then y else f' x'); y) end))
|
berghofe@14102
|
70 |
in (fn x => !f x) end;
|
berghofe@13755
|
71 |
*}
|
berghofe@13093
|
72 |
|
berghofe@14102
|
73 |
setup eq_codegen_setup
|
berghofe@14102
|
74 |
|
berghofe@12554
|
75 |
lemma [code]: "((n::nat) < 0) = False" by simp
|
berghofe@14192
|
76 |
lemma [code]: "(0 < Suc n) = True" by simp
|
berghofe@14192
|
77 |
lemmas [code] = Suc_less_eq imp_conv_disj
|
berghofe@12554
|
78 |
|
webertj@14350
|
79 |
subsection {* Configuration of the 'refute' command *}
|
webertj@14350
|
80 |
|
webertj@14350
|
81 |
text {*
|
webertj@14458
|
82 |
The following are fairly reasonable default values. For an
|
webertj@14458
|
83 |
explanation of these parameters, see 'HOL/Refute.thy'.
|
webertj@14350
|
84 |
*}
|
webertj@14350
|
85 |
|
webertj@15584
|
86 |
refute_params ["itself"=1,
|
webertj@15584
|
87 |
minsize=1,
|
webertj@14350
|
88 |
maxsize=8,
|
webertj@14806
|
89 |
maxvars=10000,
|
webertj@14806
|
90 |
maxtime=60,
|
webertj@14806
|
91 |
satsolver="auto"]
|
webertj@14350
|
92 |
|
wenzelm@9650
|
93 |
end
|