author | bulwahn |
Thu, 19 Nov 2009 08:25:51 +0100 | |
changeset 33753 | 1344e9bb611e |
parent 33752 | 9aa8e961f850 |
child 34948 | 2d5f2a9f7601 |
permissions | -rw-r--r-- |
31129
d2cead76fca2
split Predicate_Compile examples into separate theory
haftmann
parents:
31123
diff
changeset
|
1 |
theory Predicate_Compile_ex |
33375 | 2 |
imports Main Predicate_Compile_Alternative_Defs |
30374
7311a1546d85
added predicate compiler, as formally checked prototype, not as user package
haftmann
parents:
diff
changeset
|
3 |
begin |
7311a1546d85
added predicate compiler, as formally checked prototype, not as user package
haftmann
parents:
diff
changeset
|
4 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
5 |
subsection {* Basic predicates *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
6 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
7 |
inductive False' :: "bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
8 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
9 |
code_pred (expected_modes: bool) False' . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
10 |
code_pred [depth_limited] False' . |
33375 | 11 |
code_pred [random] False' . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
12 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
13 |
inductive EmptySet :: "'a \<Rightarrow> bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
14 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
15 |
code_pred (expected_modes: o => bool, i => bool) EmptySet . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
16 |
|
33253 | 17 |
definition EmptySet' :: "'a \<Rightarrow> bool" |
18 |
where "EmptySet' = {}" |
|
19 |
||
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
20 |
code_pred (expected_modes: o => bool, i => bool) [inductify] EmptySet' . |
33253 | 21 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
22 |
inductive EmptyRel :: "'a \<Rightarrow> 'b \<Rightarrow> bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
23 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
24 |
code_pred (expected_modes: o => o => bool, i => o => bool, o => i => bool, i => i => bool) EmptyRel . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
25 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
26 |
inductive EmptyClosure :: "('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> 'a \<Rightarrow> 'a \<Rightarrow> bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
27 |
for r :: "'a \<Rightarrow> 'a \<Rightarrow> bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
28 |
|
33327 | 29 |
code_pred |
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
30 |
(expected_modes: (o => o => bool) => o => o => bool, (o => o => bool) => i => o => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
31 |
(o => o => bool) => o => i => bool, (o => o => bool) => i => i => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
32 |
(i => o => bool) => o => o => bool, (i => o => bool) => i => o => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
33 |
(i => o => bool) => o => i => bool, (i => o => bool) => i => i => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
34 |
(o => i => bool) => o => o => bool, (o => i => bool) => i => o => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
35 |
(o => i => bool) => o => i => bool, (o => i => bool) => i => i => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
36 |
(i => i => bool) => o => o => bool, (i => i => bool) => i => o => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
37 |
(i => i => bool) => o => i => bool, (i => i => bool) => i => i => bool) |
33327 | 38 |
EmptyClosure . |
39 |
||
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
40 |
thm EmptyClosure.equation |
33258
f47ca46d2187
disabled test case for predicate compiler due to an problem in the inductive package
bulwahn
parents:
33255
diff
changeset
|
41 |
(* TODO: inductive package is broken! |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
42 |
inductive False'' :: "bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
43 |
where |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
44 |
"False \<Longrightarrow> False''" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
45 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
46 |
code_pred (expected_modes: []) False'' . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
47 |
|
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
48 |
inductive EmptySet'' :: "'a \<Rightarrow> bool" |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
49 |
where |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
50 |
"False \<Longrightarrow> EmptySet'' x" |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
51 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
52 |
code_pred (expected_modes: [1]) EmptySet'' . |
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
53 |
code_pred (expected_modes: [], [1]) [inductify] EmptySet'' . |
33258
f47ca46d2187
disabled test case for predicate compiler due to an problem in the inductive package
bulwahn
parents:
33255
diff
changeset
|
54 |
*) |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
55 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
56 |
inductive True' :: "bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
57 |
where |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
58 |
"True \<Longrightarrow> True'" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
59 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
60 |
code_pred (expected_modes: bool) True' . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
61 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
62 |
consts a' :: 'a |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
63 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
64 |
inductive Fact :: "'a \<Rightarrow> 'a \<Rightarrow> bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
65 |
where |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
66 |
"Fact a' a'" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
67 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
68 |
code_pred (expected_modes: o => o => bool, i => o => bool, o => i => bool, i => i => bool) Fact . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
69 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
70 |
inductive zerozero :: "nat * nat => bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
71 |
where |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
72 |
"zerozero (0, 0)" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
73 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
74 |
code_pred (expected_modes: i => bool, i * o => bool, o * i => bool, o => bool) zerozero . |
33375 | 75 |
code_pred [random] zerozero . |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
76 |
|
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
77 |
inductive JamesBond :: "nat => int => code_numeral => bool" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
78 |
where |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
79 |
"JamesBond 0 0 7" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
80 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
81 |
code_pred JamesBond . |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
82 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
83 |
values "{(a, b, c). JamesBond a b c}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
84 |
values "{(a, c, b). JamesBond a b c}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
85 |
values "{(b, a, c). JamesBond a b c}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
86 |
values "{(b, c, a). JamesBond a b c}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
87 |
values "{(c, a, b). JamesBond a b c}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
88 |
values "{(c, b, a). JamesBond a b c}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
89 |
|
33752
9aa8e961f850
adopting proposed_modes; adding a new dimension of complexity for nicer error messages; tuned
bulwahn
parents:
33628
diff
changeset
|
90 |
values "{(a, b). JamesBond 0 b a}" |
9aa8e961f850
adopting proposed_modes; adding a new dimension of complexity for nicer error messages; tuned
bulwahn
parents:
33628
diff
changeset
|
91 |
values "{(c, a). JamesBond a 0 c}" |
9aa8e961f850
adopting proposed_modes; adding a new dimension of complexity for nicer error messages; tuned
bulwahn
parents:
33628
diff
changeset
|
92 |
values "{(a, c). JamesBond a 0 c}" |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
93 |
|
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
94 |
subsection {* Alternative Rules *} |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
95 |
|
33329
b129e4c476d6
improved mode parser; added mode annotations to examples
bulwahn
parents:
33327
diff
changeset
|
96 |
datatype char = C | D | E | F | G | H |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
97 |
|
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
98 |
inductive is_C_or_D |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
99 |
where |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
100 |
"(x = C) \<or> (x = D) ==> is_C_or_D x" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
101 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
102 |
code_pred (expected_modes: i => bool) is_C_or_D . |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
103 |
thm is_C_or_D.equation |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
104 |
|
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
105 |
inductive is_D_or_E |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
106 |
where |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
107 |
"(x = D) \<or> (x = E) ==> is_D_or_E x" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
108 |
|
33628 | 109 |
lemma [code_pred_intro]: |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
110 |
"is_D_or_E D" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
111 |
by (auto intro: is_D_or_E.intros) |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
112 |
|
33628 | 113 |
lemma [code_pred_intro]: |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
114 |
"is_D_or_E E" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
115 |
by (auto intro: is_D_or_E.intros) |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
116 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
117 |
code_pred (expected_modes: o => bool, i => bool) is_D_or_E |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
118 |
proof - |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
119 |
case is_D_or_E |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
120 |
from this(1) show thesis |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
121 |
proof |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
122 |
fix x |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
123 |
assume x: "a1 = x" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
124 |
assume "x = D \<or> x = E" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
125 |
from this show thesis |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
126 |
proof |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
127 |
assume "x = D" from this x is_D_or_E(2) show thesis by simp |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
128 |
next |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
129 |
assume "x = E" from this x is_D_or_E(3) show thesis by simp |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
130 |
qed |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
131 |
qed |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
132 |
qed |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
133 |
|
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
134 |
thm is_D_or_E.equation |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
135 |
|
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
136 |
inductive is_F_or_G |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
137 |
where |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
138 |
"x = F \<or> x = G ==> is_F_or_G x" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
139 |
|
33628 | 140 |
lemma [code_pred_intro]: |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
141 |
"is_F_or_G F" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
142 |
by (auto intro: is_F_or_G.intros) |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
143 |
|
33628 | 144 |
lemma [code_pred_intro]: |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
145 |
"is_F_or_G G" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
146 |
by (auto intro: is_F_or_G.intros) |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
147 |
|
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
148 |
inductive is_FGH |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
149 |
where |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
150 |
"is_F_or_G x ==> is_FGH x" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
151 |
| "is_FGH H" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
152 |
|
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
153 |
text {* Compilation of is_FGH requires elimination rule for is_F_or_G *} |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
154 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
155 |
code_pred (expected_modes: o => bool, i => bool) is_FGH |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
156 |
proof - |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
157 |
case is_F_or_G |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
158 |
from this(1) show thesis |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
159 |
proof |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
160 |
fix x |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
161 |
assume x: "a1 = x" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
162 |
assume "x = F \<or> x = G" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
163 |
from this show thesis |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
164 |
proof |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
165 |
assume "x = F" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
166 |
from this x is_F_or_G(2) show thesis by simp |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
167 |
next |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
168 |
assume "x = G" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
169 |
from this x is_F_or_G(3) show thesis by simp |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
170 |
qed |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
171 |
qed |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
172 |
qed |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
173 |
|
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
174 |
subsection {* Preprocessor Inlining *} |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
175 |
|
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
176 |
definition "equals == (op =)" |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
177 |
|
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
178 |
inductive zerozero' :: "nat * nat => bool" where |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
179 |
"equals (x, y) (0, 0) ==> zerozero' (x, y)" |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
180 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
181 |
code_pred (expected_modes: i => bool) zerozero' . |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
182 |
|
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
183 |
lemma zerozero'_eq: "zerozero' x == zerozero x" |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
184 |
proof - |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
185 |
have "zerozero' = zerozero" |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
186 |
apply (auto simp add: mem_def) |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
187 |
apply (cases rule: zerozero'.cases) |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
188 |
apply (auto simp add: equals_def intro: zerozero.intros) |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
189 |
apply (cases rule: zerozero.cases) |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
190 |
apply (auto simp add: equals_def intro: zerozero'.intros) |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
191 |
done |
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
192 |
from this show "zerozero' x == zerozero x" by auto |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
193 |
qed |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
194 |
|
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
195 |
declare zerozero'_eq [code_pred_inline] |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
196 |
|
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
197 |
definition "zerozero'' x == zerozero' x" |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
198 |
|
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
199 |
text {* if preprocessing fails, zerozero'' will not have all modes. *} |
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
200 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
201 |
code_pred (expected_modes: i * i => bool, i * o => bool, o * i => bool, o => bool) [inductify] zerozero'' . |
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
202 |
|
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
203 |
subsection {* Numerals *} |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
204 |
|
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
205 |
definition |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
206 |
"one_or_two == {Suc 0, (Suc (Suc 0))}" |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
207 |
|
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
208 |
(*code_pred [inductify] one_or_two .*) |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
209 |
code_pred [inductify, random] one_or_two . |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
210 |
(*values "{x. one_or_two x}"*) |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
211 |
values [random] "{x. one_or_two x}" |
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
212 |
|
33475
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
213 |
inductive one_or_two' :: "nat => bool" |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
214 |
where |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
215 |
"one_or_two' 1" |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
216 |
| "one_or_two' 2" |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
217 |
|
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
218 |
code_pred one_or_two' . |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
219 |
thm one_or_two'.equation |
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
220 |
|
33475
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
221 |
values "{x. one_or_two' x}" |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
222 |
|
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
223 |
definition one_or_two'': |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
224 |
"one_or_two'' == {1, (2::nat)}" |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
225 |
|
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
226 |
code_pred [inductify] one_or_two'' . |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
227 |
thm one_or_two''.equation |
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
228 |
|
42fed8eac357
improved handling of overloaded constants; examples with numerals
bulwahn
parents:
33473
diff
changeset
|
229 |
values "{x. one_or_two'' x}" |
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
230 |
|
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
231 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
232 |
subsection {* even predicate *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
233 |
|
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
234 |
inductive even :: "nat \<Rightarrow> bool" and odd :: "nat \<Rightarrow> bool" where |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
235 |
"even 0" |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
236 |
| "even n \<Longrightarrow> odd (Suc n)" |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
237 |
| "odd n \<Longrightarrow> even (Suc n)" |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
238 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
239 |
code_pred (expected_modes: i => bool, o => bool) even . |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
240 |
code_pred [depth_limited] even . |
33375 | 241 |
code_pred [random] even . |
33137
0d16c07f8d24
added option to generate random values to values command in the predicate compiler
bulwahn
parents:
33136
diff
changeset
|
242 |
|
31514 | 243 |
thm odd.equation |
31123 | 244 |
thm even.equation |
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
245 |
thm odd.depth_limited_equation |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
246 |
thm even.depth_limited_equation |
33375 | 247 |
thm even.random_equation |
248 |
thm odd.random_equation |
|
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
249 |
|
31217 | 250 |
values "{x. even 2}" |
251 |
values "{x. odd 2}" |
|
252 |
values 10 "{n. even n}" |
|
253 |
values 10 "{n. odd n}" |
|
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
254 |
values [depth_limit = 2] "{x. even 6}" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
255 |
values [depth_limit = 7] "{x. even 6}" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
256 |
values [depth_limit = 2] "{x. odd 7}" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
257 |
values [depth_limit = 8] "{x. odd 7}" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
258 |
values [depth_limit = 7] 10 "{n. even n}" |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
259 |
|
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
260 |
definition odd' where "odd' x == \<not> even x" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
261 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
262 |
code_pred (expected_modes: i => bool) [inductify] odd' . |
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
263 |
code_pred [inductify, depth_limited] odd' . |
33375 | 264 |
code_pred [inductify, random] odd' . |
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
265 |
|
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
266 |
thm odd'.depth_limited_equation |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
267 |
values [depth_limit = 2] "{x. odd' 7}" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
268 |
values [depth_limit = 9] "{x. odd' 7}" |
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
269 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
270 |
inductive is_even :: "nat \<Rightarrow> bool" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
271 |
where |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
272 |
"n mod 2 = 0 \<Longrightarrow> is_even n" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
273 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
274 |
code_pred (expected_modes: i => bool) is_even . |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
275 |
|
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
276 |
subsection {* append predicate *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
277 |
|
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
278 |
inductive append :: "'a list \<Rightarrow> 'a list \<Rightarrow> 'a list \<Rightarrow> bool" where |
32340 | 279 |
"append [] xs xs" |
280 |
| "append xs ys zs \<Longrightarrow> append (x # xs) ys (x # zs)" |
|
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
281 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
282 |
code_pred (modes: i => i => o => bool as "concat", o => o => i => bool as "slice", o => i => i => bool as prefix, |
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
283 |
i => o => i => bool as suffix) append . |
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
284 |
code_pred [depth_limited] append . |
33477 | 285 |
code_pred [random] append . |
33473
3b275a0bf18c
adding tracing function for evaluated code; annotated compilation in the predicate compiler
bulwahn
parents:
33405
diff
changeset
|
286 |
code_pred [annotated] append . |
31123 | 287 |
|
33477 | 288 |
thm append.equation |
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
289 |
thm append.depth_limited_equation |
33477 | 290 |
thm append.random_equation |
33473
3b275a0bf18c
adding tracing function for evaluated code; annotated compilation in the predicate compiler
bulwahn
parents:
33405
diff
changeset
|
291 |
thm append.annotated_equation |
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
292 |
|
31217 | 293 |
values "{(ys, xs). append xs ys [0, Suc 0, 2]}" |
294 |
values "{zs. append [0, Suc 0, 2] [17, 8] zs}" |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
295 |
values "{ys. append [0, Suc 0, 2] ys [0, Suc 0, 2, 17, 0, 5]}" |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
296 |
|
33136
74d51fb3be2e
commented out the random generator compilation in the example file
bulwahn
parents:
33129
diff
changeset
|
297 |
values [depth_limit = 3] "{(xs, ys). append xs ys [1, 2, 3, 4, (5::nat)]}" |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
298 |
values [random] 1 "{(ys, zs). append [1::nat, 2] ys zs}" |
31195 | 299 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
300 |
value [code] "Predicate.the (concat [0::int, 1, 2] [3, 4, 5])" |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
301 |
value [code] "Predicate.the (slice ([]::int list))" |
33111 | 302 |
|
33480
dcfe9100e0a6
disabled upt example because of a problem due to overloaded constants with the predicate compiler
bulwahn
parents:
33479
diff
changeset
|
303 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
304 |
text {* tricky case with alternative rules *} |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
305 |
|
33116
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
306 |
inductive append2 |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
307 |
where |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
308 |
"append2 [] xs xs" |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
309 |
| "append2 xs ys zs \<Longrightarrow> append2 (x # xs) ys (x # zs)" |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
310 |
|
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
311 |
lemma append2_Nil: "append2 [] (xs::'b list) xs" |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
312 |
by (simp add: append2.intros(1)) |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
313 |
|
33628 | 314 |
lemmas [code_pred_intro] = append2_Nil append2.intros(2) |
33116
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
315 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
316 |
code_pred (expected_modes: i => i => o => bool, o => o => i => bool, o => i => i => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
317 |
i => o => i => bool, i => i => i => bool) append2 |
33116
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
318 |
proof - |
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
319 |
case append2 |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
320 |
from append2(1) show thesis |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
321 |
proof |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
322 |
fix xs |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
323 |
assume "a1 = []" "a2 = xs" "a3 = xs" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
324 |
from this append2(2) show thesis by simp |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
325 |
next |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
326 |
fix xs ys zs x |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
327 |
assume "a1 = x # xs" "a2 = ys" "a3 = x # zs" "append2 xs ys zs" |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
328 |
from this append2(3) show thesis by fastsimp |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
329 |
qed |
33116
b379ee2cddb1
changed importing introduction rules to fix the same type variables in all introduction rules; improved mode analysis for partially applied relations; added test case; tuned
bulwahn
parents:
33114
diff
changeset
|
330 |
qed |
33128 | 331 |
|
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
332 |
inductive tupled_append :: "'a list \<times> 'a list \<times> 'a list \<Rightarrow> bool" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
333 |
where |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
334 |
"tupled_append ([], xs, xs)" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
335 |
| "tupled_append (xs, ys, zs) \<Longrightarrow> tupled_append (x # xs, ys, x # zs)" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
336 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
337 |
code_pred (expected_modes: i * i * o => bool, o * o * i => bool, o * i * i => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
338 |
i * o * i => bool, i * i * i => bool) tupled_append . |
33375 | 339 |
code_pred [random] tupled_append . |
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
340 |
thm tupled_append.equation |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
341 |
|
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
342 |
(*TODO: values with tupled modes*) |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
343 |
(*values "{xs. tupled_append ([1,2,3], [4,5], xs)}"*) |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
344 |
|
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
345 |
inductive tupled_append' |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
346 |
where |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
347 |
"tupled_append' ([], xs, xs)" |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
348 |
| "[| ys = fst (xa, y); x # zs = snd (xa, y); |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
349 |
tupled_append' (xs, ys, zs) |] ==> tupled_append' (x # xs, xa, y)" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
350 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
351 |
code_pred (expected_modes: i * i * o => bool, o * o * i => bool, o * i * i => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
352 |
i * o * i => bool, i * i * i => bool) tupled_append' . |
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
353 |
thm tupled_append'.equation |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
354 |
|
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
355 |
inductive tupled_append'' :: "'a list \<times> 'a list \<times> 'a list \<Rightarrow> bool" |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
356 |
where |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
357 |
"tupled_append'' ([], xs, xs)" |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
358 |
| "ys = fst yszs ==> x # zs = snd yszs ==> tupled_append'' (xs, ys, zs) \<Longrightarrow> tupled_append'' (x # xs, yszs)" |
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
359 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
360 |
code_pred (expected_modes: i * i * o => bool, o * o * i => bool, o * i * i => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
361 |
i * o * i => bool, i * i * i => bool) [inductify] tupled_append'' . |
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
362 |
thm tupled_append''.equation |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
363 |
|
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
364 |
inductive tupled_append''' :: "'a list \<times> 'a list \<times> 'a list \<Rightarrow> bool" |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
365 |
where |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
366 |
"tupled_append''' ([], xs, xs)" |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
367 |
| "yszs = (ys, zs) ==> tupled_append''' (xs, yszs) \<Longrightarrow> tupled_append''' (x # xs, ys, x # zs)" |
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
368 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
369 |
code_pred (expected_modes: i * i * o => bool, o * o * i => bool, o * i * i => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
370 |
i * o * i => bool, i * i * i => bool) [inductify] tupled_append''' . |
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
371 |
thm tupled_append'''.equation |
33114
4785ef554dcc
added further examples; added mode to code_pred command; tuned; some temporary things in Predicate_Compile_ex
bulwahn
parents:
33113
diff
changeset
|
372 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
373 |
subsection {* map_ofP predicate *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
374 |
|
33113 | 375 |
inductive map_ofP :: "('a \<times> 'b) list \<Rightarrow> 'a \<Rightarrow> 'b \<Rightarrow> bool" |
376 |
where |
|
377 |
"map_ofP ((a, b)#xs) a b" |
|
378 |
| "map_ofP xs a b \<Longrightarrow> map_ofP (x#xs) a b" |
|
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
379 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
380 |
code_pred (expected_modes: i => o => o => bool, i => i => o => bool, i => o => i => bool, i => i => i => bool) map_ofP . |
33113 | 381 |
thm map_ofP.equation |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
382 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
383 |
subsection {* filter predicate *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
384 |
|
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
385 |
inductive filter1 |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
386 |
for P |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
387 |
where |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
388 |
"filter1 P [] []" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
389 |
| "P x ==> filter1 P xs ys ==> filter1 P (x#xs) (x#ys)" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
390 |
| "\<not> P x ==> filter1 P xs ys ==> filter1 P (x#xs) ys" |
33329
b129e4c476d6
improved mode parser; added mode annotations to examples
bulwahn
parents:
33327
diff
changeset
|
391 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
392 |
code_pred (expected_modes: (i => bool) => i => o => bool, (i => bool) => i => i => bool) filter1 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
393 |
code_pred [depth_limited] filter1 . |
33375 | 394 |
code_pred [random] filter1 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
395 |
|
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
396 |
thm filter1.equation |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
397 |
|
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
398 |
inductive filter2 |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
399 |
where |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
400 |
"filter2 P [] []" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
401 |
| "P x ==> filter2 P xs ys ==> filter2 P (x#xs) (x#ys)" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
402 |
| "\<not> P x ==> filter2 P xs ys ==> filter2 P (x#xs) ys" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
403 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
404 |
code_pred (expected_modes: i => i => i => bool, i => i => o => bool) filter2 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
405 |
code_pred [depth_limited] filter2 . |
33375 | 406 |
code_pred [random] filter2 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
407 |
thm filter2.equation |
33375 | 408 |
thm filter2.random_equation |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
409 |
|
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
410 |
inductive filter3 |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
411 |
for P |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
412 |
where |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
413 |
"List.filter P xs = ys ==> filter3 P xs ys" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
414 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
415 |
code_pred (expected_modes: (o => bool) => i => o => bool, (o => bool) => i => i => bool , (i => bool) => i => o => bool, (i => bool) => i => i => bool) filter3 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
416 |
code_pred [depth_limited] filter3 . |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
417 |
thm filter3.depth_limited_equation |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
418 |
|
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
419 |
inductive filter4 |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
420 |
where |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
421 |
"List.filter P xs = ys ==> filter4 P xs ys" |
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
422 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
423 |
code_pred (expected_modes: i => i => o => bool, i => i => i => bool) filter4 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
424 |
code_pred [depth_limited] filter4 . |
33375 | 425 |
code_pred [random] filter4 . |
33147
180dc60bd88c
improving the compilation with higher-order arguments in the predicate compiler
bulwahn
parents:
33146
diff
changeset
|
426 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
427 |
subsection {* reverse predicate *} |
33112
6672184a736b
added a few tricky examples with tuples; added alternative introduction rules for some constants; corrected mode analysis with negation; improved fetching of definitions
bulwahn
parents:
33111
diff
changeset
|
428 |
|
32340 | 429 |
inductive rev where |
430 |
"rev [] []" |
|
431 |
| "rev xs xs' ==> append xs' [x] ys ==> rev (x#xs) ys" |
|
432 |
||
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
433 |
code_pred (expected_modes: i => o => bool, o => i => bool, i => i => bool) rev . |
32340 | 434 |
|
435 |
thm rev.equation |
|
436 |
||
437 |
values "{xs. rev [0, 1, 2, 3::nat] xs}" |
|
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
438 |
|
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
439 |
inductive tupled_rev where |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
440 |
"tupled_rev ([], [])" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
441 |
| "tupled_rev (xs, xs') \<Longrightarrow> tupled_append (xs', [x], ys) \<Longrightarrow> tupled_rev (x#xs, ys)" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
442 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
443 |
code_pred (expected_modes: i * o => bool, o * i => bool, i * i => bool) tupled_rev . |
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
444 |
thm tupled_rev.equation |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
445 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
446 |
subsection {* partition predicate *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
447 |
|
30972
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
448 |
inductive partition :: "('a \<Rightarrow> bool) \<Rightarrow> 'a list \<Rightarrow> 'a list \<Rightarrow> 'a list \<Rightarrow> bool" |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
449 |
for f where |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
450 |
"partition f [] [] []" |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
451 |
| "f x \<Longrightarrow> partition f xs ys zs \<Longrightarrow> partition f (x # xs) (x # ys) zs" |
5b65835ccc92
some experiements towards user interface for predicate compiler
haftmann
parents:
30953
diff
changeset
|
452 |
| "\<not> f x \<Longrightarrow> partition f xs ys zs \<Longrightarrow> partition f (x # xs) ys (x # zs)" |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
453 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
454 |
code_pred (expected_modes: (i => bool) => i => o => o => bool, (i => bool) => o => i => i => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
455 |
(i => bool) => i => i => o => bool, (i => bool) => i => o => i => bool, (i => bool) => i => i => i => bool) partition . |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
456 |
code_pred [depth_limited] partition . |
33375 | 457 |
code_pred [random] partition . |
31123 | 458 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
459 |
values 10 "{(ys, zs). partition is_even |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
460 |
[0, Suc 0, 2, 3, 4, 5, 6, 7] ys zs}" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
461 |
values 10 "{zs. partition is_even zs [0, 2] [3, 5]}" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
462 |
values 10 "{zs. partition is_even zs [0, 7] [3, 5]}" |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
463 |
|
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
464 |
inductive tupled_partition :: "('a \<Rightarrow> bool) \<Rightarrow> ('a list \<times> 'a list \<times> 'a list) \<Rightarrow> bool" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
465 |
for f where |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
466 |
"tupled_partition f ([], [], [])" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
467 |
| "f x \<Longrightarrow> tupled_partition f (xs, ys, zs) \<Longrightarrow> tupled_partition f (x # xs, x # ys, zs)" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
468 |
| "\<not> f x \<Longrightarrow> tupled_partition f (xs, ys, zs) \<Longrightarrow> tupled_partition f (x # xs, ys, x # zs)" |
32314
66bbad0bfef9
changed resolving depending predicates and fetching in the predicate compiler
bulwahn
parents:
32310
diff
changeset
|
469 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
470 |
code_pred (expected_modes: (i => bool) => i => bool, (i => bool) => (i * i * o) => bool, (i => bool) => (i * o * i) => bool, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
471 |
(i => bool) => (o * i * i) => bool, (i => bool) => (i * o * o) => bool) tupled_partition . |
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
472 |
|
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
473 |
thm tupled_partition.equation |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
474 |
|
33628 | 475 |
lemma [code_pred_intro]: |
32340 | 476 |
"r a b \<Longrightarrow> tranclp r a b" |
477 |
"r a b \<Longrightarrow> tranclp r b c \<Longrightarrow> tranclp r a c" |
|
478 |
by auto |
|
31573
0047df9eb347
improved infrastructure of predicate compiler for adding manual introduction rules
bulwahn
parents:
31551
diff
changeset
|
479 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
480 |
subsection {* transitive predicate *} |
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
481 |
|
33753
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
482 |
text {* Also look at the tabled transitive closure in the Library *} |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
483 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
484 |
code_pred (modes: (i => o => bool) => i => i => bool, (i => o => bool) => i => o => bool as forwards_trancl, |
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
485 |
(o => i => bool) => i => i => bool, (o => i => bool) => o => i => bool as backwards_trancl, (o => o => bool) => i => i => bool, (o => o => bool) => i => o => bool, |
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
486 |
(o => o => bool) => o => i => bool, (o => o => bool) => o => o => bool) tranclp |
31573
0047df9eb347
improved infrastructure of predicate compiler for adding manual introduction rules
bulwahn
parents:
31551
diff
changeset
|
487 |
proof - |
31580 | 488 |
case tranclp |
489 |
from this converse_tranclpE[OF this(1)] show thesis by metis |
|
31573
0047df9eb347
improved infrastructure of predicate compiler for adding manual introduction rules
bulwahn
parents:
31551
diff
changeset
|
490 |
qed |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
491 |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
492 |
code_pred [depth_limited] tranclp . |
33375 | 493 |
code_pred [random] tranclp . |
31123 | 494 |
thm tranclp.equation |
33375 | 495 |
thm tranclp.random_equation |
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
496 |
|
31217 | 497 |
inductive succ :: "nat \<Rightarrow> nat \<Rightarrow> bool" where |
498 |
"succ 0 1" |
|
499 |
| "succ m n \<Longrightarrow> succ (Suc m) (Suc n)" |
|
500 |
||
31550
b63d253ed9e2
code_pred command now also requires proofs for dependent predicates; changed handling of parameters in introrules of executable function
bulwahn
parents:
31514
diff
changeset
|
501 |
code_pred succ . |
33375 | 502 |
code_pred [random] succ . |
31217 | 503 |
thm succ.equation |
33375 | 504 |
thm succ.random_equation |
32340 | 505 |
|
506 |
values 10 "{(m, n). succ n m}" |
|
507 |
values "{m. succ 0 m}" |
|
508 |
values "{m. succ m 0}" |
|
509 |
||
33479
428ddcc16e7b
added optional mode annotations for parameters in the values command
bulwahn
parents:
33477
diff
changeset
|
510 |
text {* values command needs mode annotation of the parameter succ |
428ddcc16e7b
added optional mode annotations for parameters in the values command
bulwahn
parents:
33477
diff
changeset
|
511 |
to disambiguate which mode is to be chosen. *} |
33626
42f69386943a
new names for predicate functions in the predicate compiler
bulwahn
parents:
33624
diff
changeset
|
512 |
|
42f69386943a
new names for predicate functions in the predicate compiler
bulwahn
parents:
33624
diff
changeset
|
513 |
values [mode: i => o => bool] 20 "{n. tranclp succ 10 n}" |
42f69386943a
new names for predicate functions in the predicate compiler
bulwahn
parents:
33624
diff
changeset
|
514 |
values [mode: o => i => bool] 10 "{n. tranclp succ n 10}" |
31217 | 515 |
values 20 "{(n, m). tranclp succ n m}" |
33479
428ddcc16e7b
added optional mode annotations for parameters in the values command
bulwahn
parents:
33477
diff
changeset
|
516 |
|
33753
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
517 |
inductive example_graph :: "int => int => bool" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
518 |
where |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
519 |
"example_graph 0 1" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
520 |
| "example_graph 1 2" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
521 |
| "example_graph 1 3" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
522 |
| "example_graph 4 7" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
523 |
| "example_graph 4 5" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
524 |
| "example_graph 5 6" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
525 |
| "example_graph 7 6" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
526 |
| "example_graph 7 8" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
527 |
|
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
528 |
inductive not_reachable_in_example_graph :: "int => int => bool" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
529 |
where "\<not> (tranclp example_graph x y) ==> not_reachable_in_example_graph x y" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
530 |
|
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
531 |
code_pred (expected_modes: i => i => bool) not_reachable_in_example_graph . |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
532 |
|
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
533 |
thm not_reachable_in_example_graph.equation |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
534 |
|
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
535 |
value "not_reachable_in_example_graph 0 3" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
536 |
value "not_reachable_in_example_graph 4 8" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
537 |
value "not_reachable_in_example_graph 5 6" |
1344e9bb611e
changing the proof procedure for parameters; adding a testcase for negation and parameters; adopting print_tac to the latest function print_tac' in the predicate compiler
bulwahn
parents:
33752
diff
changeset
|
538 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
539 |
subsection {* IMP *} |
32424 | 540 |
|
541 |
types |
|
542 |
var = nat |
|
543 |
state = "int list" |
|
544 |
||
545 |
datatype com = |
|
546 |
Skip | |
|
547 |
Ass var "state => int" | |
|
548 |
Seq com com | |
|
549 |
IF "state => bool" com com | |
|
550 |
While "state => bool" com |
|
551 |
||
552 |
inductive exec :: "com => state => state => bool" where |
|
553 |
"exec Skip s s" | |
|
554 |
"exec (Ass x e) s (s[x := e(s)])" | |
|
555 |
"exec c1 s1 s2 ==> exec c2 s2 s3 ==> exec (Seq c1 c2) s1 s3" | |
|
556 |
"b s ==> exec c1 s t ==> exec (IF b c1 c2) s t" | |
|
557 |
"~b s ==> exec c2 s t ==> exec (IF b c1 c2) s t" | |
|
558 |
"~b s ==> exec (While b c) s s" | |
|
559 |
"b s1 ==> exec c s1 s2 ==> exec (While b c) s2 s3 ==> exec (While b c) s1 s3" |
|
560 |
||
561 |
code_pred exec . |
|
562 |
||
563 |
values "{t. exec |
|
564 |
(While (%s. s!0 > 0) (Seq (Ass 0 (%s. s!0 - 1)) (Ass 1 (%s. s!1 + 1)))) |
|
565 |
[3,5] t}" |
|
566 |
||
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
567 |
inductive tupled_exec :: "(com \<times> state \<times> state) \<Rightarrow> bool" where |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
568 |
"tupled_exec (Skip, s, s)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
569 |
"tupled_exec (Ass x e, s, s[x := e(s)])" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
570 |
"tupled_exec (c1, s1, s2) ==> tupled_exec (c2, s2, s3) ==> tupled_exec (Seq c1 c2, s1, s3)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
571 |
"b s ==> tupled_exec (c1, s, t) ==> tupled_exec (IF b c1 c2, s, t)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
572 |
"~b s ==> tupled_exec (c2, s, t) ==> tupled_exec (IF b c1 c2, s, t)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
573 |
"~b s ==> tupled_exec (While b c, s, s)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
574 |
"b s1 ==> tupled_exec (c, s1, s2) ==> tupled_exec (While b c, s2, s3) ==> tupled_exec (While b c, s1, s3)" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
575 |
|
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
576 |
code_pred tupled_exec . |
32424 | 577 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
578 |
subsection {* CCS *} |
32408 | 579 |
|
580 |
text{* This example formalizes finite CCS processes without communication or |
|
581 |
recursion. For simplicity, labels are natural numbers. *} |
|
582 |
||
583 |
datatype proc = nil | pre nat proc | or proc proc | par proc proc |
|
584 |
||
585 |
inductive step :: "proc \<Rightarrow> nat \<Rightarrow> proc \<Rightarrow> bool" where |
|
586 |
"step (pre n p) n p" | |
|
587 |
"step p1 a q \<Longrightarrow> step (or p1 p2) a q" | |
|
588 |
"step p2 a q \<Longrightarrow> step (or p1 p2) a q" | |
|
589 |
"step p1 a q \<Longrightarrow> step (par p1 p2) a (par q p2)" | |
|
590 |
"step p2 a q \<Longrightarrow> step (par p1 p2) a (par p1 q)" |
|
591 |
||
592 |
code_pred step . |
|
593 |
||
594 |
inductive steps where |
|
595 |
"steps p [] p" | |
|
596 |
"step p a q \<Longrightarrow> steps q as r \<Longrightarrow> steps p (a#as) r" |
|
597 |
||
598 |
code_pred steps . |
|
599 |
||
33477 | 600 |
values 3 |
601 |
"{as . steps (par (or (pre 0 nil) (pre 1 nil)) (pre 2 nil)) as (par nil nil)}" |
|
602 |
||
32408 | 603 |
values 5 |
604 |
"{as . steps (par (or (pre 0 nil) (pre 1 nil)) (pre 2 nil)) as (par nil nil)}" |
|
605 |
||
606 |
values 3 "{(a,q). step (par nil nil) a q}" |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
607 |
|
32408 | 608 |
|
33105
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
609 |
inductive tupled_step :: "(proc \<times> nat \<times> proc) \<Rightarrow> bool" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
610 |
where |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
611 |
"tupled_step (pre n p, n, p)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
612 |
"tupled_step (p1, a, q) \<Longrightarrow> tupled_step (or p1 p2, a, q)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
613 |
"tupled_step (p2, a, q) \<Longrightarrow> tupled_step (or p1 p2, a, q)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
614 |
"tupled_step (p1, a, q) \<Longrightarrow> tupled_step (par p1 p2, a, par q p2)" | |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
615 |
"tupled_step (p2, a, q) \<Longrightarrow> tupled_step (par p1 p2, a, par p1 q)" |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
616 |
|
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
617 |
code_pred tupled_step . |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
618 |
thm tupled_step.equation |
1e4146bf841c
added tupled versions of examples for the predicate compiler
bulwahn
parents:
33104
diff
changeset
|
619 |
|
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
620 |
subsection {* divmod *} |
32579 | 621 |
|
622 |
inductive divmod_rel :: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> bool" where |
|
623 |
"k < l \<Longrightarrow> divmod_rel k l 0 k" |
|
624 |
| "k \<ge> l \<Longrightarrow> divmod_rel (k - l) l q r \<Longrightarrow> divmod_rel k l (Suc q) r" |
|
625 |
||
626 |
code_pred divmod_rel .. |
|
33626
42f69386943a
new names for predicate functions in the predicate compiler
bulwahn
parents:
33624
diff
changeset
|
627 |
thm divmod_rel.equation |
42f69386943a
new names for predicate functions in the predicate compiler
bulwahn
parents:
33624
diff
changeset
|
628 |
value [code] "Predicate.the (divmod_rel_i_i_o_o 1705 42)" |
32579 | 629 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
630 |
subsection {* Minimum *} |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
631 |
|
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
632 |
definition Min |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
633 |
where "Min s r x \<equiv> s x \<and> (\<forall>y. r x y \<longrightarrow> x = y)" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
634 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
635 |
code_pred [inductify] Min . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
636 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
637 |
subsection {* Lexicographic order *} |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
638 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
639 |
code_pred [inductify] lexord . |
33375 | 640 |
code_pred [inductify, random] lexord . |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
641 |
thm lexord.equation |
33375 | 642 |
thm lexord.random_equation |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
643 |
|
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
644 |
inductive less_than_nat :: "nat * nat => bool" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
645 |
where |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
646 |
"less_than_nat (0, x)" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
647 |
| "less_than_nat (x, y) ==> less_than_nat (Suc x, Suc y)" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
648 |
|
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
649 |
code_pred less_than_nat . |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
650 |
|
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
651 |
code_pred [depth_limited] less_than_nat . |
33375 | 652 |
code_pred [random] less_than_nat . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
653 |
|
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
654 |
inductive test_lexord :: "nat list * nat list => bool" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
655 |
where |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
656 |
"lexord less_than_nat (xs, ys) ==> test_lexord (xs, ys)" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
657 |
|
33375 | 658 |
code_pred [random] test_lexord . |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
659 |
code_pred [depth_limited] test_lexord . |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
660 |
thm test_lexord.depth_limited_equation |
33375 | 661 |
thm test_lexord.random_equation |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
662 |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
663 |
values "{x. test_lexord ([1, 2, 3], [1, 2, 5])}" |
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
664 |
values [depth_limit = 5] "{x. test_lexord ([1, 2, 3], [1, 2, 5])}" |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
665 |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
666 |
lemmas [code_pred_def] = lexn_conv lex_conv lenlex_conv |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
667 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
668 |
code_pred [inductify] lexn . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
669 |
thm lexn.equation |
33139
9c01ee6f8ee9
added skip_proof option; playing with compilation of depth-limited predicates
bulwahn
parents:
33138
diff
changeset
|
670 |
|
33375 | 671 |
code_pred [random] lexn . |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
672 |
|
33375 | 673 |
thm lexn.random_equation |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
674 |
|
33375 | 675 |
code_pred [inductify] lenlex . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
676 |
thm lenlex.equation |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
677 |
|
33375 | 678 |
code_pred [inductify, random] lenlex . |
679 |
thm lenlex.random_equation |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
680 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
681 |
code_pred [inductify] lists . |
32670 | 682 |
thm lists.equation |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
683 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
684 |
subsection {* AVL Tree *} |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
685 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
686 |
datatype 'a tree = ET | MKT 'a "'a tree" "'a tree" nat |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
687 |
fun height :: "'a tree => nat" where |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
688 |
"height ET = 0" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
689 |
| "height (MKT x l r h) = max (height l) (height r) + 1" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
690 |
|
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
691 |
consts avl :: "'a tree => bool" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
692 |
primrec |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
693 |
"avl ET = True" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
694 |
"avl (MKT x l r h) = ((height l = height r \<or> height l = 1 + height r \<or> height r = 1+height l) \<and> |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
695 |
h = max (height l) (height r) + 1 \<and> avl l \<and> avl r)" |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
696 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
697 |
code_pred [inductify] avl . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
698 |
thm avl.equation |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
699 |
|
33375 | 700 |
code_pred [random] avl . |
701 |
thm avl.random_equation |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
702 |
|
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
703 |
fun set_of |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
704 |
where |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
705 |
"set_of ET = {}" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
706 |
| "set_of (MKT n l r h) = insert n (set_of l \<union> set_of r)" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
707 |
|
33123
3c7c4372f9ad
cleaned up debugging messages; added options to code_pred command
bulwahn
parents:
33120
diff
changeset
|
708 |
fun is_ord :: "nat tree => bool" |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
709 |
where |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
710 |
"is_ord ET = True" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
711 |
| "is_ord (MKT n l r h) = |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
712 |
((\<forall>n' \<in> set_of l. n' < n) \<and> (\<forall>n' \<in> set_of r. n < n') \<and> is_ord l \<and> is_ord r)" |
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
713 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
714 |
code_pred (expected_modes: i => o => bool, i => i => bool) [inductify] set_of . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
715 |
thm set_of.equation |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
716 |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
717 |
code_pred [inductify] is_ord . |
33480
dcfe9100e0a6
disabled upt example because of a problem due to overloaded constants with the predicate compiler
bulwahn
parents:
33479
diff
changeset
|
718 |
thm is_ord_aux.equation |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
719 |
thm is_ord.equation |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
720 |
|
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
721 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
722 |
subsection {* Definitions about Relations *} |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
723 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
724 |
code_pred [inductify] converse . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
725 |
thm converse.equation |
33145 | 726 |
code_pred [inductify] rel_comp . |
727 |
thm rel_comp.equation |
|
728 |
code_pred [inductify] Image . |
|
729 |
thm Image.equation |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
730 |
code_pred (expected_modes: (o => bool) => o => bool, (o => bool) => i * o => bool, |
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
731 |
(o => bool) => o * i => bool, (o => bool) => i => bool) [inductify] Id_on . |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
732 |
thm Id_on.equation |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
733 |
code_pred [inductify] Domain . |
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
734 |
thm Domain.equation |
33145 | 735 |
code_pred [inductify] Range . |
33253 | 736 |
thm Range.equation |
33145 | 737 |
code_pred [inductify] Field . |
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
738 |
thm Field.equation |
33255
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
739 |
code_pred [inductify] refl_on . |
75b01355e5d4
adding test case for inlining of predicate compiler
bulwahn
parents:
33253
diff
changeset
|
740 |
thm refl_on.equation |
33145 | 741 |
code_pred [inductify] total_on . |
742 |
thm total_on.equation |
|
743 |
code_pred [inductify] antisym . |
|
744 |
thm antisym.equation |
|
745 |
code_pred [inductify] trans . |
|
746 |
thm trans.equation |
|
747 |
code_pred [inductify] single_valued . |
|
748 |
thm single_valued.equation |
|
749 |
code_pred [inductify] inv_image . |
|
750 |
thm inv_image.equation |
|
32668
b2de45007537
added first prototype of the extended predicate compiler
bulwahn
parents:
32665
diff
changeset
|
751 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
752 |
subsection {* Inverting list functions *} |
33114
4785ef554dcc
added further examples; added mode to code_pred command; tuned; some temporary things in Predicate_Compile_ex
bulwahn
parents:
33113
diff
changeset
|
753 |
|
33752
9aa8e961f850
adopting proposed_modes; adding a new dimension of complexity for nicer error messages; tuned
bulwahn
parents:
33628
diff
changeset
|
754 |
code_pred [inductify] length . |
33375 | 755 |
code_pred [inductify, random] length . |
33114
4785ef554dcc
added further examples; added mode to code_pred command; tuned; some temporary things in Predicate_Compile_ex
bulwahn
parents:
33113
diff
changeset
|
756 |
thm size_listP.equation |
33375 | 757 |
thm size_listP.random_equation |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
758 |
|
33405
5c1928d5db38
adding testcases for code inlining, sets and numerals to the example files of the predicate compiler and its quickcheck prototype; disabling length example
bulwahn
parents:
33375
diff
changeset
|
759 |
(*values [random] 1 "{xs. size_listP (xs::nat list) (5::nat)}"*) |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
760 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
761 |
code_pred (expected_modes: i => o => bool, o => i => bool, i => i => bool) [inductify] List.concat . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
762 |
thm concatP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
763 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
764 |
values "{ys. concatP [[1, 2], [3, (4::int)]] ys}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
765 |
values "{ys. concatP [[1, 2], [3]] [1, 2, (3::nat)]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
766 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
767 |
code_pred [inductify, depth_limited] List.concat . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
768 |
thm concatP.depth_limited_equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
769 |
|
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
770 |
values [depth_limit = 3] 3 |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
771 |
"{xs. concatP xs ([0] :: nat list)}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
772 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
773 |
values [depth_limit = 5] 3 |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
774 |
"{xs. concatP xs ([1] :: int list)}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
775 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
776 |
values [depth_limit = 5] 3 |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
777 |
"{xs. concatP xs ([1] :: nat list)}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
778 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
779 |
values [depth_limit = 5] 3 |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
780 |
"{xs. concatP xs [(1::int), 2]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
781 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
782 |
code_pred (expected_modes: i => o => bool, i => i => bool) [inductify] hd . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
783 |
thm hdP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
784 |
values "{x. hdP [1, 2, (3::int)] x}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
785 |
values "{(xs, x). hdP [1, 2, (3::int)] 1}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
786 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
787 |
code_pred (expected_modes: i => o => bool, i => i => bool) [inductify] tl . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
788 |
thm tlP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
789 |
values "{x. tlP [1, 2, (3::nat)] x}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
790 |
values "{x. tlP [1, 2, (3::int)] [3]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
791 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
792 |
code_pred [inductify] last . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
793 |
thm lastP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
794 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
795 |
code_pred [inductify] butlast . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
796 |
thm butlastP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
797 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
798 |
code_pred [inductify] take . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
799 |
thm takeP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
800 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
801 |
code_pred [inductify] drop . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
802 |
thm dropP.equation |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
803 |
code_pred [inductify] zip . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
804 |
thm zipP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
805 |
|
33480
dcfe9100e0a6
disabled upt example because of a problem due to overloaded constants with the predicate compiler
bulwahn
parents:
33479
diff
changeset
|
806 |
(*code_pred [inductify] upt .*) |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
807 |
code_pred [inductify] remdups . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
808 |
thm remdupsP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
809 |
code_pred [inductify, depth_limited] remdups . |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
810 |
values [depth_limit = 4] 5 "{xs. remdupsP xs [1, (2::int)]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
811 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
812 |
code_pred [inductify] remove1 . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
813 |
thm remove1P.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
814 |
values "{xs. remove1P 1 xs [2, (3::int)]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
815 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
816 |
code_pred [inductify] removeAll . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
817 |
thm removeAllP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
818 |
code_pred [inductify, depth_limited] removeAll . |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
819 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
820 |
values [depth_limit = 4] 10 "{xs. removeAllP 1 xs [(2::nat)]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
821 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
822 |
code_pred [inductify] distinct . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
823 |
thm distinct.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
824 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
825 |
code_pred [inductify] replicate . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
826 |
thm replicateP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
827 |
values 5 "{(n, xs). replicateP n (0::int) xs}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
828 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
829 |
code_pred [inductify] splice . |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
830 |
thm splice.simps |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
831 |
thm spliceP.equation |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
832 |
|
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
833 |
values "{xs. spliceP xs [1, 2, 3] [1, 1, 1, 2, 1, (3::nat)]}" |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
834 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
835 |
code_pred [inductify] List.rev . |
33129
3085da75ed54
changed import_intros to handle parameters differently; changed handling of higher-order function compilation; reverted MicroJava change; tuned
bulwahn
parents:
33128
diff
changeset
|
836 |
code_pred [inductify] map . |
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
837 |
code_pred [inductify] foldr . |
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
838 |
code_pred [inductify] foldl . |
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
839 |
code_pred [inductify] filter . |
33375 | 840 |
code_pred [inductify, random] filter . |
33141
89b23fad5e02
modifying the depth-limited compilation to be sound, but now throws an error undefined in case of hitting the depth limit in an negative context; cleaning up the examples
bulwahn
parents:
33140
diff
changeset
|
841 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
842 |
subsection {* Context Free Grammar *} |
32669
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
843 |
|
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
844 |
datatype alphabet = a | b |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
845 |
|
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
846 |
inductive_set S\<^isub>1 and A\<^isub>1 and B\<^isub>1 where |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
847 |
"[] \<in> S\<^isub>1" |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
848 |
| "w \<in> A\<^isub>1 \<Longrightarrow> b # w \<in> S\<^isub>1" |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
849 |
| "w \<in> B\<^isub>1 \<Longrightarrow> a # w \<in> S\<^isub>1" |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
850 |
| "w \<in> S\<^isub>1 \<Longrightarrow> a # w \<in> A\<^isub>1" |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
851 |
| "w \<in> S\<^isub>1 \<Longrightarrow> b # w \<in> S\<^isub>1" |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
852 |
| "\<lbrakk>v \<in> B\<^isub>1; v \<in> B\<^isub>1\<rbrakk> \<Longrightarrow> a # v @ w \<in> B\<^isub>1" |
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
853 |
|
33140
83951822bfd0
cleaning the signature of the predicate compiler core; renaming signature and structures to uniform long names
bulwahn
parents:
33139
diff
changeset
|
854 |
code_pred [inductify] S\<^isub>1p . |
33375 | 855 |
code_pred [inductify, random] S\<^isub>1p . |
32669
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
856 |
thm S\<^isub>1p.equation |
33375 | 857 |
thm S\<^isub>1p.random_equation |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
858 |
|
33143
730a2e8a6ec6
modularized the compilation in the predicate compiler
bulwahn
parents:
33141
diff
changeset
|
859 |
values [random] 5 "{x. S\<^isub>1p x}" |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
860 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
861 |
inductive_set S\<^isub>2 and A\<^isub>2 and B\<^isub>2 where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
862 |
"[] \<in> S\<^isub>2" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
863 |
| "w \<in> A\<^isub>2 \<Longrightarrow> b # w \<in> S\<^isub>2" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
864 |
| "w \<in> B\<^isub>2 \<Longrightarrow> a # w \<in> S\<^isub>2" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
865 |
| "w \<in> S\<^isub>2 \<Longrightarrow> a # w \<in> A\<^isub>2" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
866 |
| "w \<in> S\<^isub>2 \<Longrightarrow> b # w \<in> B\<^isub>2" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
867 |
| "\<lbrakk>v \<in> B\<^isub>2; v \<in> B\<^isub>2\<rbrakk> \<Longrightarrow> a # v @ w \<in> B\<^isub>2" |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
868 |
|
33375 | 869 |
code_pred [inductify, random] S\<^isub>2 . |
870 |
thm S\<^isub>2.random_equation |
|
871 |
thm A\<^isub>2.random_equation |
|
872 |
thm B\<^isub>2.random_equation |
|
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
873 |
|
33143
730a2e8a6ec6
modularized the compilation in the predicate compiler
bulwahn
parents:
33141
diff
changeset
|
874 |
values [random] 10 "{x. S\<^isub>2 x}" |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
875 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
876 |
inductive_set S\<^isub>3 and A\<^isub>3 and B\<^isub>3 where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
877 |
"[] \<in> S\<^isub>3" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
878 |
| "w \<in> A\<^isub>3 \<Longrightarrow> b # w \<in> S\<^isub>3" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
879 |
| "w \<in> B\<^isub>3 \<Longrightarrow> a # w \<in> S\<^isub>3" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
880 |
| "w \<in> S\<^isub>3 \<Longrightarrow> a # w \<in> A\<^isub>3" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
881 |
| "w \<in> S\<^isub>3 \<Longrightarrow> b # w \<in> B\<^isub>3" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
882 |
| "\<lbrakk>v \<in> B\<^isub>3; w \<in> B\<^isub>3\<rbrakk> \<Longrightarrow> a # v @ w \<in> B\<^isub>3" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
883 |
|
33124
5378e61add1a
continued cleaning up; moved tuple expanding to core
bulwahn
parents:
33123
diff
changeset
|
884 |
code_pred [inductify] S\<^isub>3 . |
33138
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
885 |
thm S\<^isub>3.equation |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
886 |
|
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
887 |
values 10 "{x. S\<^isub>3 x}" |
e2e23987c59a
reinvestigating the compilation of the random computation in the predicate compiler
bulwahn
parents:
33137
diff
changeset
|
888 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
889 |
inductive_set S\<^isub>4 and A\<^isub>4 and B\<^isub>4 where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
890 |
"[] \<in> S\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
891 |
| "w \<in> A\<^isub>4 \<Longrightarrow> b # w \<in> S\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
892 |
| "w \<in> B\<^isub>4 \<Longrightarrow> a # w \<in> S\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
893 |
| "w \<in> S\<^isub>4 \<Longrightarrow> a # w \<in> A\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
894 |
| "\<lbrakk>v \<in> A\<^isub>4; w \<in> A\<^isub>4\<rbrakk> \<Longrightarrow> b # v @ w \<in> A\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
895 |
| "w \<in> S\<^isub>4 \<Longrightarrow> b # w \<in> B\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
896 |
| "\<lbrakk>v \<in> B\<^isub>4; w \<in> B\<^isub>4\<rbrakk> \<Longrightarrow> a # v @ w \<in> B\<^isub>4" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
897 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
898 |
code_pred (expected_modes: o => bool, i => bool) S\<^isub>4p . |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
899 |
|
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
900 |
subsection {* Lambda *} |
32669
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
901 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
902 |
datatype type = |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
903 |
Atom nat |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
904 |
| Fun type type (infixr "\<Rightarrow>" 200) |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
905 |
|
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
906 |
datatype dB = |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
907 |
Var nat |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
908 |
| App dB dB (infixl "\<degree>" 200) |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
909 |
| Abs type dB |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
910 |
|
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
911 |
primrec |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
912 |
nth_el :: "'a list \<Rightarrow> nat \<Rightarrow> 'a option" ("_\<langle>_\<rangle>" [90, 0] 91) |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
913 |
where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
914 |
"[]\<langle>i\<rangle> = None" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
915 |
| "(x # xs)\<langle>i\<rangle> = (case i of 0 \<Rightarrow> Some x | Suc j \<Rightarrow> xs \<langle>j\<rangle>)" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
916 |
|
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
917 |
inductive nth_el' :: "'a list \<Rightarrow> nat \<Rightarrow> 'a \<Rightarrow> bool" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
918 |
where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
919 |
"nth_el' (x # xs) 0 x" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
920 |
| "nth_el' xs i y \<Longrightarrow> nth_el' (x # xs) (Suc i) y" |
33128 | 921 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
922 |
inductive typing :: "type list \<Rightarrow> dB \<Rightarrow> type \<Rightarrow> bool" ("_ \<turnstile> _ : _" [50, 50, 50] 50) |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
923 |
where |
33128 | 924 |
Var [intro!]: "nth_el' env x T \<Longrightarrow> env \<turnstile> Var x : T" |
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
925 |
| Abs [intro!]: "T # env \<turnstile> t : U \<Longrightarrow> env \<turnstile> Abs T t : (T \<Rightarrow> U)" |
33250
5c2af18a3237
including the predicate compiler in HOL-Main; added RandomPredicate monad to Quickcheck
bulwahn
parents:
33147
diff
changeset
|
926 |
| App [intro!]: "env \<turnstile> s : T \<Rightarrow> U \<Longrightarrow> env \<turnstile> t : T \<Longrightarrow> env \<turnstile> (s \<degree> t) : U" |
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
927 |
|
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
928 |
primrec |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
929 |
lift :: "[dB, nat] => dB" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
930 |
where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
931 |
"lift (Var i) k = (if i < k then Var i else Var (i + 1))" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
932 |
| "lift (s \<degree> t) k = lift s k \<degree> lift t k" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
933 |
| "lift (Abs T s) k = Abs T (lift s (k + 1))" |
32669
462b1dd67a58
added context free grammar example; removed dead code; adapted to work without quick and dirty mode; fixed typo
bulwahn
parents:
32668
diff
changeset
|
934 |
|
32672
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
935 |
primrec |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
936 |
subst :: "[dB, dB, nat] => dB" ("_[_'/_]" [300, 0, 0] 300) |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
937 |
where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
938 |
subst_Var: "(Var i)[s/k] = |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
939 |
(if k < i then Var (i - 1) else if i = k then s else Var i)" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
940 |
| subst_App: "(t \<degree> u)[s/k] = t[s/k] \<degree> u[s/k]" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
941 |
| subst_Abs: "(Abs T t)[s/k] = Abs T (t[lift s 0 / k+1])" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
942 |
|
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
943 |
inductive beta :: "[dB, dB] => bool" (infixl "\<rightarrow>\<^sub>\<beta>" 50) |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
944 |
where |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
945 |
beta [simp, intro!]: "Abs T s \<degree> t \<rightarrow>\<^sub>\<beta> s[t/0]" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
946 |
| appL [simp, intro!]: "s \<rightarrow>\<^sub>\<beta> t ==> s \<degree> u \<rightarrow>\<^sub>\<beta> t \<degree> u" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
947 |
| appR [simp, intro!]: "s \<rightarrow>\<^sub>\<beta> t ==> u \<degree> s \<rightarrow>\<^sub>\<beta> u \<degree> t" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
948 |
| abs [simp, intro!]: "s \<rightarrow>\<^sub>\<beta> t ==> Abs T s \<rightarrow>\<^sub>\<beta> Abs T t" |
90f3ce5d27ae
added first version of quickcheck based on the predicate compiler; added a few quickcheck examples
bulwahn
parents:
32670
diff
changeset
|
949 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
950 |
code_pred (expected_modes: i => i => o => bool, i => i => i => bool) typing . |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
951 |
thm typing.equation |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
952 |
|
33624 | 953 |
code_pred (modes: i => o => bool as reduce') beta . |
33326
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
954 |
thm beta.equation |
7d0288d90535
improved handling of alternative rules; added test cases for alternative rules; normalized tracing in the predicate compiler
bulwahn
parents:
33258
diff
changeset
|
955 |
|
33623
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
956 |
values "{x. App (Abs (Atom 0) (Var 0)) (Var 1) \<rightarrow>\<^sub>\<beta> x}" |
4ec42d38224f
changed modes to expected_modes; added UNION to code_pred_inlining; fixed some examples; tuned
bulwahn
parents:
33621
diff
changeset
|
957 |
|
33624 | 958 |
definition "reduce t = Predicate.the (reduce' t)" |
959 |
||
960 |
value "reduce (App (Abs (Atom 0) (Var 0)) (Var 1))" |
|
961 |
||
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
962 |
code_pred [random] typing . |
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
963 |
|
33621
dd564a26fd2f
adopted predicate compiler examples to new syntax for modes
bulwahn
parents:
33618
diff
changeset
|
964 |
values [random] 1 "{(\<Gamma>, t, T). \<Gamma> \<turnstile> t : T}" |
33618
d8359a16e0c5
adding more tests for the values command; adding some forbidden constants to inductify
bulwahn
parents:
33480
diff
changeset
|
965 |
|
33624 | 966 |
subsection {* A minimal example of yet another semantics *} |
967 |
||
968 |
text {* thanks to Elke Salecker *} |
|
969 |
||
970 |
types |
|
971 |
vname = nat |
|
972 |
vvalue = int |
|
973 |
var_assign = "vname \<Rightarrow> vvalue" --"variable assignment" |
|
974 |
||
975 |
datatype ir_expr = |
|
976 |
IrConst vvalue |
|
977 |
| ObjAddr vname |
|
978 |
| Add ir_expr ir_expr |
|
979 |
||
980 |
datatype val = |
|
981 |
IntVal vvalue |
|
982 |
||
983 |
record configuration = |
|
984 |
Env :: var_assign |
|
985 |
||
986 |
inductive eval_var :: |
|
987 |
"ir_expr \<Rightarrow> configuration \<Rightarrow> val \<Rightarrow> bool" |
|
988 |
where |
|
989 |
irconst: "eval_var (IrConst i) conf (IntVal i)" |
|
990 |
| objaddr: "\<lbrakk> Env conf n = i \<rbrakk> \<Longrightarrow> eval_var (ObjAddr n) conf (IntVal i)" |
|
991 |
| plus: "\<lbrakk> eval_var l conf (IntVal vl); eval_var r conf (IntVal vr) \<rbrakk> \<Longrightarrow> eval_var (Add l r) conf (IntVal (vl+vr))" |
|
992 |
||
993 |
||
33752
9aa8e961f850
adopting proposed_modes; adding a new dimension of complexity for nicer error messages; tuned
bulwahn
parents:
33628
diff
changeset
|
994 |
code_pred eval_var . |
33624 | 995 |
thm eval_var.equation |
996 |
||
997 |
values "{val. eval_var (Add (IrConst 1) (IrConst 2)) (| Env = (\<lambda>x. 0)|) val}" |
|
998 |
||
30374
7311a1546d85
added predicate compiler, as formally checked prototype, not as user package
haftmann
parents:
diff
changeset
|
999 |
end |