50 remove :: "['a, 'b, 'b] => bool" and |
50 remove :: "['a, 'b, 'b] => bool" and |
51 bag_appl:: "['a, 'a, 'a, 'a] => bool" |
51 bag_appl:: "['a, 'a, 'a, 'a] => bool" |
52 where |
52 where |
53 append: "\<And>x xs ys zs. append [] xs xs .. |
53 append: "\<And>x xs ys zs. append [] xs xs .. |
54 append (x#xs) ys (x#zs) :- append xs ys zs" and |
54 append (x#xs) ys (x#zs) :- append xs ys zs" and |
55 reverse: "\<And>L1 L2. reverse L1 L2 :- (!rev_aux. |
55 reverse: "\<And>L1 L2. reverse L1 L2 :- (\<forall>rev_aux. |
56 (!L. rev_aux [] L L ).. |
56 (\<forall>L. rev_aux [] L L ).. |
57 (!X L1 L2 L3. rev_aux (X#L1) L2 L3 :- rev_aux L1 L2 (X#L3)) |
57 (\<forall>X L1 L2 L3. rev_aux (X#L1) L2 L3 :- rev_aux L1 L2 (X#L3)) |
58 => rev_aux L1 L2 [])" and |
58 => rev_aux L1 L2 [])" and |
59 |
59 |
60 mappred: "\<And>x xs y ys P. mappred P [] [] .. |
60 mappred: "\<And>x xs y ys P. mappred P [] [] .. |
61 mappred P (x#xs) (y#ys) :- P x y & mappred P xs ys" and |
61 mappred P (x#xs) (y#ys) :- P x y & mappred P xs ys" and |
62 mapfun: "\<And>x xs ys f. mapfun f [] [] .. |
62 mapfun: "\<And>x xs ys f. mapfun f [] [] .. |
90 |
90 |
91 schematic_goal "append [a,b] y ?L" |
91 schematic_goal "append [a,b] y ?L" |
92 apply (prolog prog_Test) |
92 apply (prolog prog_Test) |
93 done |
93 done |
94 |
94 |
95 schematic_goal "!y. append [a,b] y (?L y)" |
95 schematic_goal "\<forall>y. append [a,b] y (?L y)" |
96 apply (prolog prog_Test) |
96 apply (prolog prog_Test) |
97 done |
97 done |
98 |
98 |
99 schematic_goal "reverse [] ?L" |
99 schematic_goal "reverse [] ?L" |
100 apply (prolog prog_Test) |
100 apply (prolog prog_Test) |
115 schematic_goal "mappred age ?x [23,24]" |
115 schematic_goal "mappred age ?x [23,24]" |
116 apply (prolog prog_Test) |
116 apply (prolog prog_Test) |
117 back |
117 back |
118 done |
118 done |
119 |
119 |
120 schematic_goal "mappred (%x y. ? z. age z y) ?x [23,24]" |
120 schematic_goal "mappred (\<lambda>x y. \<exists>z. age z y) ?x [23,24]" |
121 apply (prolog prog_Test) |
121 apply (prolog prog_Test) |
122 done |
122 done |
123 |
123 |
124 schematic_goal "mappred ?P [bob,sue] [24,23]" |
124 schematic_goal "mappred ?P [bob,sue] [24,23]" |
125 apply (prolog prog_Test) |
125 apply (prolog prog_Test) |
157 apply (prolog prog_Test) |
157 apply (prolog prog_Test) |
158 back |
158 back |
159 back |
159 back |
160 done |
160 done |
161 |
161 |
162 lemma "? x y. age x y" |
162 lemma "\<exists>x y. age x y" |
163 apply (prolog prog_Test) |
163 apply (prolog prog_Test) |
164 done |
164 done |
165 |
165 |
166 lemma "!x y. append [] x x" |
166 lemma "\<forall>x y. append [] x x" |
167 apply (prolog prog_Test) |
167 apply (prolog prog_Test) |
168 done |
168 done |
169 |
169 |
170 schematic_goal "age sue 24 .. age bob 23 => age ?x ?y" |
170 schematic_goal "age sue 24 .. age bob 23 => age ?x ?y" |
171 apply (prolog prog_Test) |
171 apply (prolog prog_Test) |
179 lemma "age bob 25 :- age bob 24 => age bob 25" |
179 lemma "age bob 25 :- age bob 24 => age bob 25" |
180 apply (prolog prog_Test) |
180 apply (prolog prog_Test) |
181 done |
181 done |
182 (*reset trace_DEPTH_FIRST;*) |
182 (*reset trace_DEPTH_FIRST;*) |
183 |
183 |
184 schematic_goal "(!x. age x 25 :- age x 23) => age ?x 25 & age ?y 25" |
184 schematic_goal "(\<forall>x. age x 25 :- age x 23) => age ?x 25 & age ?y 25" |
185 apply (prolog prog_Test) |
185 apply (prolog prog_Test) |
186 back |
186 back |
187 back |
187 back |
188 back |
188 back |
189 done |
189 done |
190 |
190 |
191 lemma "!x. ? y. eq x y" |
191 lemma "\<forall>x. \<exists>y. eq x y" |
192 apply (prolog prog_Test) |
192 apply (prolog prog_Test) |
193 done |
193 done |
194 |
194 |
195 schematic_goal "? P. P & eq P ?x" |
195 schematic_goal "\<exists>P. P \<and> eq P ?x" |
196 apply (prolog prog_Test) |
196 apply (prolog prog_Test) |
197 (* |
197 (* |
198 back |
198 back |
199 back |
199 back |
200 back |
200 back |
204 back |
204 back |
205 back |
205 back |
206 *) |
206 *) |
207 done |
207 done |
208 |
208 |
209 lemma "? P. eq P (True & True) & P" |
209 lemma "\<exists>P. eq P (True & True) \<and> P" |
210 apply (prolog prog_Test) |
210 apply (prolog prog_Test) |
211 done |
211 done |
212 |
212 |
213 lemma "? P. eq P (|) & P k True" |
213 lemma "\<exists>P. eq P (\<or>) \<and> P k True" |
214 apply (prolog prog_Test) |
214 apply (prolog prog_Test) |
215 done |
215 done |
216 |
216 |
217 lemma "? P. eq P (Q => True) & P" |
217 lemma "\<exists>P. eq P (Q => True) \<and> P" |
218 apply (prolog prog_Test) |
218 apply (prolog prog_Test) |
219 done |
219 done |
220 |
220 |
221 (* P flexible: *) |
221 (* P flexible: *) |
222 lemma "(!P k l. P k l :- eq P Q) => Q a b" |
222 lemma "(\<forall>P k l. P k l :- eq P Q) => Q a b" |
223 apply (prolog prog_Test) |
223 apply (prolog prog_Test) |
224 done |
224 done |
225 (* |
225 (* |
226 loops: |
226 loops: |
227 lemma "(!P k l. P k l :- eq P (%x y. x | y)) => a | b" |
227 lemma "(!P k l. P k l :- eq P (%x y. x | y)) => a | b" |
228 *) |
228 *) |
229 |
229 |
230 (* implication and disjunction in atom: *) |
230 (* implication and disjunction in atom: *) |
231 lemma "? Q. (!p q. R(q :- p) => R(Q p q)) & Q (t | s) (s | t)" |
231 lemma "\<exists>Q. (\<forall>p q. R(q :- p) => R(Q p q)) \<and> Q (t | s) (s | t)" |
232 by fast |
232 by fast |
233 |
233 |
234 (* disjunction in atom: *) |
234 (* disjunction in atom: *) |
235 lemma "(!P. g P :- (P => b | a)) => g(a | b)" |
235 lemma "(\<forall>P. g P :- (P => b \<or> a)) => g(a \<or> b)" |
236 apply (tactic "step_tac (put_claset HOL_cs @{context}) 1") |
236 apply (tactic "step_tac (put_claset HOL_cs @{context}) 1") |
237 apply (tactic "step_tac (put_claset HOL_cs @{context}) 1") |
237 apply (tactic "step_tac (put_claset HOL_cs @{context}) 1") |
238 apply (tactic "step_tac (put_claset HOL_cs @{context}) 1") |
238 apply (tactic "step_tac (put_claset HOL_cs @{context}) 1") |
239 prefer 2 |
239 prefer 2 |
240 apply fast |
240 apply fast |
245 hangs: |
245 hangs: |
246 lemma "(!P. g P :- (P => b | a)) => g(a | b)" |
246 lemma "(!P. g P :- (P => b | a)) => g(a | b)" |
247 by fast |
247 by fast |
248 *) |
248 *) |
249 |
249 |
250 schematic_goal "!Emp Stk.( |
250 schematic_goal "\<forall>Emp Stk.( |
251 empty (Emp::'b) .. |
251 empty (Emp::'b) .. |
252 (!(X::nat) S. add X (S::'b) (Stk X S)) .. |
252 (\<forall>(X::nat) S. add X (S::'b) (Stk X S)) .. |
253 (!(X::nat) S. remove X ((Stk X S)::'b) S)) |
253 (\<forall>(X::nat) S. remove X ((Stk X S)::'b) S)) |
254 => bag_appl 23 24 ?X ?Y" |
254 => bag_appl 23 24 ?X ?Y" |
255 oops |
255 oops |
256 |
256 |
257 schematic_goal "!Qu. ( |
257 schematic_goal "\<forall>Qu. ( |
258 (!L. empty (Qu L L)) .. |
258 (\<forall>L. empty (Qu L L)) .. |
259 (!(X::nat) L K. add X (Qu L (X#K)) (Qu L K)) .. |
259 (\<forall>(X::nat) L K. add X (Qu L (X#K)) (Qu L K)) .. |
260 (!(X::nat) L K. remove X (Qu (X#L) K) (Qu L K))) |
260 (\<forall>(X::nat) L K. remove X (Qu (X#L) K) (Qu L K))) |
261 => bag_appl 23 24 ?X ?Y" |
261 => bag_appl 23 24 ?X ?Y" |
262 oops |
262 oops |
263 |
263 |
264 lemma "D & (!y. E) :- (!x. True & True) :- True => D" |
264 lemma "D \<and> (\<forall>y. E) :- (\<forall>x. True \<and> True) :- True => D" |
265 apply (prolog prog_Test) |
265 apply (prolog prog_Test) |
266 done |
266 done |
267 |
267 |
268 schematic_goal "P x .. P y => P ?X" |
268 schematic_goal "P x .. P y => P ?X" |
269 apply (prolog prog_Test) |
269 apply (prolog prog_Test) |