23 (* ------------------------------------------------------------------------*) |
23 (* ------------------------------------------------------------------------*) |
24 |
24 |
25 val temp = prove_goalw Dlist.thy [dlist_copy_def] "dlist_copy`f`UU=UU" |
25 val temp = prove_goalw Dlist.thy [dlist_copy_def] "dlist_copy`f`UU=UU" |
26 (fn prems => |
26 (fn prems => |
27 [ |
27 [ |
28 (asm_simp_tac (HOLCF_ss addsimps |
28 (asm_simp_tac (!simpset addsimps |
29 (dlist_rews @ [dlist_abs_iso,dlist_rep_iso])) 1) |
29 (dlist_rews @ [dlist_abs_iso,dlist_rep_iso])) 1) |
30 ]); |
30 ]); |
31 |
31 |
32 val dlist_copy = [temp]; |
32 val dlist_copy = [temp]; |
33 |
33 |
34 |
34 |
35 val temp = prove_goalw Dlist.thy [dlist_copy_def,dnil_def] |
35 val temp = prove_goalw Dlist.thy [dlist_copy_def,dnil_def] |
36 "dlist_copy`f`dnil=dnil" |
36 "dlist_copy`f`dnil=dnil" |
37 (fn prems => |
37 (fn prems => |
38 [ |
38 [ |
39 (asm_simp_tac (HOLCF_ss addsimps |
39 (asm_simp_tac (!simpset addsimps |
40 (dlist_rews @ [dlist_abs_iso,dlist_rep_iso])) 1) |
40 (dlist_rews @ [dlist_abs_iso,dlist_rep_iso])) 1) |
41 ]); |
41 ]); |
42 |
42 |
43 val dlist_copy = temp :: dlist_copy; |
43 val dlist_copy = temp :: dlist_copy; |
44 |
44 |
46 val temp = prove_goalw Dlist.thy [dlist_copy_def,dcons_def] |
46 val temp = prove_goalw Dlist.thy [dlist_copy_def,dcons_def] |
47 "xl~=UU ==> dlist_copy`f`(dcons`x`xl)= dcons`x`(f`xl)" |
47 "xl~=UU ==> dlist_copy`f`(dcons`x`xl)= dcons`x`(f`xl)" |
48 (fn prems => |
48 (fn prems => |
49 [ |
49 [ |
50 (cut_facts_tac prems 1), |
50 (cut_facts_tac prems 1), |
51 (asm_simp_tac (HOLCF_ss addsimps |
51 (asm_simp_tac (!simpset addsimps |
52 (dlist_rews @ [dlist_abs_iso,dlist_rep_iso])) 1), |
52 (dlist_rews @ [dlist_abs_iso,dlist_rep_iso])) 1), |
53 (res_inst_tac [("Q","x=UU")] classical2 1), |
53 (res_inst_tac [("Q","x=UU")] classical2 1), |
54 (asm_simp_tac HOLCF_ss 1), |
54 (Asm_simp_tac 1), |
55 (asm_simp_tac (HOLCF_ss addsimps [defined_spair]) 1) |
55 (asm_simp_tac (!simpset addsimps [defined_spair]) 1) |
56 ]); |
56 ]); |
57 |
57 |
58 val dlist_copy = temp :: dlist_copy; |
58 val dlist_copy = temp :: dlist_copy; |
59 |
59 |
60 val dlist_rews = dlist_copy @ dlist_rews; |
60 val dlist_rews = dlist_copy @ dlist_rews; |
65 |
65 |
66 qed_goalw "Exh_dlist" Dlist.thy [dcons_def,dnil_def] |
66 qed_goalw "Exh_dlist" Dlist.thy [dcons_def,dnil_def] |
67 "l = UU | l = dnil | (? x xl. x~=UU &xl~=UU & l = dcons`x`xl)" |
67 "l = UU | l = dnil | (? x xl. x~=UU &xl~=UU & l = dcons`x`xl)" |
68 (fn prems => |
68 (fn prems => |
69 [ |
69 [ |
70 (simp_tac HOLCF_ss 1), |
70 (Simp_tac 1), |
71 (rtac (dlist_rep_iso RS subst) 1), |
71 (rtac (dlist_rep_iso RS subst) 1), |
72 (res_inst_tac [("p","dlist_rep`l")] ssumE 1), |
72 (res_inst_tac [("p","dlist_rep`l")] ssumE 1), |
73 (rtac disjI1 1), |
73 (rtac disjI1 1), |
74 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
74 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
75 (rtac disjI2 1), |
75 (rtac disjI2 1), |
76 (rtac disjI1 1), |
76 (rtac disjI1 1), |
77 (res_inst_tac [("p","x")] oneE 1), |
77 (res_inst_tac [("p","x")] oneE 1), |
78 (contr_tac 1), |
78 (contr_tac 1), |
79 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
79 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
80 (rtac disjI2 1), |
80 (rtac disjI2 1), |
81 (rtac disjI2 1), |
81 (rtac disjI2 1), |
82 (res_inst_tac [("p","y")] sprodE 1), |
82 (res_inst_tac [("p","y")] sprodE 1), |
83 (contr_tac 1), |
83 (contr_tac 1), |
84 (rtac exI 1), |
84 (rtac exI 1), |
85 (rtac exI 1), |
85 (rtac exI 1), |
86 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
86 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
87 (fast_tac HOL_cs 1) |
87 (fast_tac HOL_cs 1) |
88 ]); |
88 ]); |
89 |
89 |
90 |
90 |
91 qed_goal "dlistE" Dlist.thy |
91 qed_goal "dlistE" Dlist.thy |
109 (* ------------------------------------------------------------------------*) |
109 (* ------------------------------------------------------------------------*) |
110 |
110 |
111 val temp = prove_goalw Dlist.thy [dlist_when_def] "dlist_when`f1`f2`UU=UU" |
111 val temp = prove_goalw Dlist.thy [dlist_when_def] "dlist_when`f1`f2`UU=UU" |
112 (fn prems => |
112 (fn prems => |
113 [ |
113 [ |
114 (asm_simp_tac (HOLCF_ss addsimps [dlist_iso_strict]) 1) |
114 (asm_simp_tac (!simpset addsimps [dlist_iso_strict]) 1) |
115 ]); |
115 ]); |
116 |
116 |
117 val dlist_when = [temp]; |
117 val dlist_when = [temp]; |
118 |
118 |
119 val temp = prove_goalw Dlist.thy [dlist_when_def,dnil_def] |
119 val temp = prove_goalw Dlist.thy [dlist_when_def,dnil_def] |
120 "dlist_when`f1`f2`dnil= f1" |
120 "dlist_when`f1`f2`dnil= f1" |
121 (fn prems => |
121 (fn prems => |
122 [ |
122 [ |
123 (asm_simp_tac (HOLCF_ss addsimps [dlist_abs_iso]) 1) |
123 (asm_simp_tac (!simpset addsimps [dlist_abs_iso]) 1) |
124 ]); |
124 ]); |
125 |
125 |
126 val dlist_when = temp::dlist_when; |
126 val dlist_when = temp::dlist_when; |
127 |
127 |
128 val temp = prove_goalw Dlist.thy [dlist_when_def,dcons_def] |
128 val temp = prove_goalw Dlist.thy [dlist_when_def,dcons_def] |
129 "[|x~=UU;xl~=UU|] ==> dlist_when`f1`f2`(dcons`x`xl)= f2`x`xl" |
129 "[|x~=UU;xl~=UU|] ==> dlist_when`f1`f2`(dcons`x`xl)= f2`x`xl" |
130 (fn prems => |
130 (fn prems => |
131 [ |
131 [ |
132 (cut_facts_tac prems 1), |
132 (cut_facts_tac prems 1), |
133 (asm_simp_tac (HOLCF_ss addsimps [dlist_abs_iso,defined_spair]) 1) |
133 (asm_simp_tac (!simpset addsimps [dlist_abs_iso,defined_spair]) 1) |
134 ]); |
134 ]); |
135 |
135 |
136 val dlist_when = temp::dlist_when; |
136 val dlist_when = temp::dlist_when; |
137 |
137 |
138 val dlist_rews = dlist_when @ dlist_rews; |
138 val dlist_rews = dlist_when @ dlist_rews; |
142 (* ------------------------------------------------------------------------*) |
142 (* ------------------------------------------------------------------------*) |
143 |
143 |
144 fun prover defs thm = prove_goalw Dlist.thy defs thm |
144 fun prover defs thm = prove_goalw Dlist.thy defs thm |
145 (fn prems => |
145 (fn prems => |
146 [ |
146 [ |
147 (simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
147 (simp_tac (!simpset addsimps dlist_rews) 1) |
148 ]); |
148 ]); |
149 |
149 |
150 val dlist_discsel = [ |
150 val dlist_discsel = [ |
151 prover [is_dnil_def] "is_dnil`UU=UU", |
151 prover [is_dnil_def] "is_dnil`UU=UU", |
152 prover [is_dcons_def] "is_dcons`UU=UU", |
152 prover [is_dcons_def] "is_dcons`UU=UU", |
187 |
187 |
188 fun prover contr thm = prove_goal Dlist.thy thm |
188 fun prover contr thm = prove_goal Dlist.thy thm |
189 (fn prems => |
189 (fn prems => |
190 [ |
190 [ |
191 (res_inst_tac [("P1",contr)] classical3 1), |
191 (res_inst_tac [("P1",contr)] classical3 1), |
192 (simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
192 (simp_tac (!simpset addsimps dlist_rews) 1), |
193 (dtac sym 1), |
193 (dtac sym 1), |
194 (asm_simp_tac HOLCF_ss 1), |
194 (Asm_simp_tac 1), |
195 (simp_tac (HOLCF_ss addsimps (prems @ dlist_rews)) 1) |
195 (simp_tac (!simpset addsimps (prems @ dlist_rews)) 1) |
196 ]); |
196 ]); |
197 |
197 |
198 |
198 |
199 val dlist_constrdef = [ |
199 val dlist_constrdef = [ |
200 prover "is_dnil`(UU::'a dlist) ~= UU" "dnil~=(UU::'a dlist)", |
200 prover "is_dnil`(UU::'a dlist) ~= UU" "dnil~=(UU::'a dlist)", |
226 [ |
226 [ |
227 (res_inst_tac [("P1","TT << FF")] classical3 1), |
227 (res_inst_tac [("P1","TT << FF")] classical3 1), |
228 (resolve_tac dist_less_tr 1), |
228 (resolve_tac dist_less_tr 1), |
229 (dres_inst_tac [("fo5","is_dnil")] monofun_cfun_arg 1), |
229 (dres_inst_tac [("fo5","is_dnil")] monofun_cfun_arg 1), |
230 (etac box_less 1), |
230 (etac box_less 1), |
231 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
231 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
232 (res_inst_tac [("Q","(x::'a)=UU")] classical2 1), |
232 (res_inst_tac [("Q","(x::'a)=UU")] classical2 1), |
233 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
233 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
234 (res_inst_tac [("Q","(xl ::'a dlist)=UU")] classical2 1), |
234 (res_inst_tac [("Q","(xl ::'a dlist)=UU")] classical2 1), |
235 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
235 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
236 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
236 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
237 ]); |
237 ]); |
238 |
238 |
239 val dlist_dist_less = [temp]; |
239 val dlist_dist_less = [temp]; |
240 |
240 |
241 val temp = prove_goal Dlist.thy "[|x~=UU;xl~=UU|]==>~ dcons`x`xl << dnil" |
241 val temp = prove_goal Dlist.thy "[|x~=UU;xl~=UU|]==>~ dcons`x`xl << dnil" |
244 (cut_facts_tac prems 1), |
244 (cut_facts_tac prems 1), |
245 (res_inst_tac [("P1","TT << FF")] classical3 1), |
245 (res_inst_tac [("P1","TT << FF")] classical3 1), |
246 (resolve_tac dist_less_tr 1), |
246 (resolve_tac dist_less_tr 1), |
247 (dres_inst_tac [("fo5","is_dcons")] monofun_cfun_arg 1), |
247 (dres_inst_tac [("fo5","is_dcons")] monofun_cfun_arg 1), |
248 (etac box_less 1), |
248 (etac box_less 1), |
249 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
249 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
250 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
250 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
251 ]); |
251 ]); |
252 |
252 |
253 val dlist_dist_less = temp::dlist_dist_less; |
253 val dlist_dist_less = temp::dlist_dist_less; |
254 |
254 |
255 val temp = prove_goal Dlist.thy "dnil ~= dcons`x`xl" |
255 val temp = prove_goal Dlist.thy "dnil ~= dcons`x`xl" |
256 (fn prems => |
256 (fn prems => |
257 [ |
257 [ |
258 (res_inst_tac [("Q","x=UU")] classical2 1), |
258 (res_inst_tac [("Q","x=UU")] classical2 1), |
259 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
259 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
260 (res_inst_tac [("Q","xl=UU")] classical2 1), |
260 (res_inst_tac [("Q","xl=UU")] classical2 1), |
261 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
261 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
262 (res_inst_tac [("P1","TT = FF")] classical3 1), |
262 (res_inst_tac [("P1","TT = FF")] classical3 1), |
263 (resolve_tac dist_eq_tr 1), |
263 (resolve_tac dist_eq_tr 1), |
264 (dres_inst_tac [("f","is_dnil")] cfun_arg_cong 1), |
264 (dres_inst_tac [("f","is_dnil")] cfun_arg_cong 1), |
265 (etac box_equals 1), |
265 (etac box_equals 1), |
266 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
266 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
267 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
267 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
268 ]); |
268 ]); |
269 |
269 |
270 val dlist_dist_eq = [temp,temp RS not_sym]; |
270 val dlist_dist_eq = [temp,temp RS not_sym]; |
271 |
271 |
272 val dlist_rews = dlist_dist_less @ dlist_dist_eq @ dlist_rews; |
272 val dlist_rews = dlist_dist_less @ dlist_dist_eq @ dlist_rews; |
281 [ |
281 [ |
282 (cut_facts_tac prems 1), |
282 (cut_facts_tac prems 1), |
283 (rtac conjI 1), |
283 (rtac conjI 1), |
284 (dres_inst_tac [("fo5","dlist_when`UU`(LAM x l.x)")] monofun_cfun_arg 1), |
284 (dres_inst_tac [("fo5","dlist_when`UU`(LAM x l.x)")] monofun_cfun_arg 1), |
285 (etac box_less 1), |
285 (etac box_less 1), |
286 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1), |
286 (asm_simp_tac (!simpset addsimps dlist_when) 1), |
287 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1), |
287 (asm_simp_tac (!simpset addsimps dlist_when) 1), |
288 (dres_inst_tac [("fo5","dlist_when`UU`(LAM x l.l)")] monofun_cfun_arg 1), |
288 (dres_inst_tac [("fo5","dlist_when`UU`(LAM x l.l)")] monofun_cfun_arg 1), |
289 (etac box_less 1), |
289 (etac box_less 1), |
290 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1), |
290 (asm_simp_tac (!simpset addsimps dlist_when) 1), |
291 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1) |
291 (asm_simp_tac (!simpset addsimps dlist_when) 1) |
292 ]); |
292 ]); |
293 |
293 |
294 val dlist_invert =[temp]; |
294 val dlist_invert =[temp]; |
295 |
295 |
296 (* ------------------------------------------------------------------------*) |
296 (* ------------------------------------------------------------------------*) |
303 [ |
303 [ |
304 (cut_facts_tac prems 1), |
304 (cut_facts_tac prems 1), |
305 (rtac conjI 1), |
305 (rtac conjI 1), |
306 (dres_inst_tac [("f","dlist_when`UU`(LAM x l.x)")] cfun_arg_cong 1), |
306 (dres_inst_tac [("f","dlist_when`UU`(LAM x l.x)")] cfun_arg_cong 1), |
307 (etac box_equals 1), |
307 (etac box_equals 1), |
308 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1), |
308 (asm_simp_tac (!simpset addsimps dlist_when) 1), |
309 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1), |
309 (asm_simp_tac (!simpset addsimps dlist_when) 1), |
310 (dres_inst_tac [("f","dlist_when`UU`(LAM x l.l)")] cfun_arg_cong 1), |
310 (dres_inst_tac [("f","dlist_when`UU`(LAM x l.l)")] cfun_arg_cong 1), |
311 (etac box_equals 1), |
311 (etac box_equals 1), |
312 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1), |
312 (asm_simp_tac (!simpset addsimps dlist_when) 1), |
313 (asm_simp_tac (HOLCF_ss addsimps dlist_when) 1) |
313 (asm_simp_tac (!simpset addsimps dlist_when) 1) |
314 ]); |
314 ]); |
315 |
315 |
316 val dlist_inject = [temp]; |
316 val dlist_inject = [temp]; |
317 |
317 |
318 |
318 |
344 qed_goal "dhd2" Dlist.thy "xl~=UU ==> dhd`(dcons`x`xl)=x" |
344 qed_goal "dhd2" Dlist.thy "xl~=UU ==> dhd`(dcons`x`xl)=x" |
345 (fn prems => |
345 (fn prems => |
346 [ |
346 [ |
347 (cut_facts_tac prems 1), |
347 (cut_facts_tac prems 1), |
348 (res_inst_tac [("Q","x=UU")] classical2 1), |
348 (res_inst_tac [("Q","x=UU")] classical2 1), |
349 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
349 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
350 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
350 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
351 ]); |
351 ]); |
352 |
352 |
353 qed_goal "dtl2" Dlist.thy "x~=UU ==> dtl`(dcons`x`xl)=xl" |
353 qed_goal "dtl2" Dlist.thy "x~=UU ==> dtl`(dcons`x`xl)=xl" |
354 (fn prems => |
354 (fn prems => |
355 [ |
355 [ |
356 (cut_facts_tac prems 1), |
356 (cut_facts_tac prems 1), |
357 (res_inst_tac [("Q","xl=UU")] classical2 1), |
357 (res_inst_tac [("Q","xl=UU")] classical2 1), |
358 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
358 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
359 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
359 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
360 ]); |
360 ]); |
361 |
361 |
362 val dlist_rews = dhd2 :: dtl2 :: dlist_rews; |
362 val dlist_rews = dhd2 :: dtl2 :: dlist_rews; |
363 |
363 |
364 (* ------------------------------------------------------------------------*) |
364 (* ------------------------------------------------------------------------*) |
367 |
367 |
368 val temp = prove_goalw Dlist.thy [dlist_take_def] "dlist_take n`UU=UU" |
368 val temp = prove_goalw Dlist.thy [dlist_take_def] "dlist_take n`UU=UU" |
369 (fn prems => |
369 (fn prems => |
370 [ |
370 [ |
371 (res_inst_tac [("n","n")] natE 1), |
371 (res_inst_tac [("n","n")] natE 1), |
372 (asm_simp_tac iterate_ss 1), |
372 (Asm_simp_tac 1), |
373 (asm_simp_tac iterate_ss 1), |
373 (Asm_simp_tac 1), |
374 (simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
374 (simp_tac (!simpset addsimps dlist_rews) 1) |
375 ]); |
375 ]); |
376 |
376 |
377 val dlist_take = [temp]; |
377 val dlist_take = [temp]; |
378 |
378 |
379 val temp = prove_goalw Dlist.thy [dlist_take_def] "dlist_take 0`xs=UU" |
379 val temp = prove_goalw Dlist.thy [dlist_take_def] "dlist_take 0`xs=UU" |
380 (fn prems => |
380 (fn prems => |
381 [ |
381 [ |
382 (asm_simp_tac iterate_ss 1) |
382 (Asm_simp_tac 1) |
383 ]); |
383 ]); |
384 |
384 |
385 val dlist_take = temp::dlist_take; |
385 val dlist_take = temp::dlist_take; |
386 |
386 |
387 val temp = prove_goalw Dlist.thy [dlist_take_def] |
387 val temp = prove_goalw Dlist.thy [dlist_take_def] |
388 "dlist_take (Suc n)`dnil=dnil" |
388 "dlist_take (Suc n)`dnil=dnil" |
389 (fn prems => |
389 (fn prems => |
390 [ |
390 [ |
391 (asm_simp_tac iterate_ss 1), |
391 (Asm_simp_tac 1), |
392 (simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
392 (simp_tac (!simpset addsimps dlist_rews) 1) |
393 ]); |
393 ]); |
394 |
394 |
395 val dlist_take = temp::dlist_take; |
395 val dlist_take = temp::dlist_take; |
396 |
396 |
397 val temp = prove_goalw Dlist.thy [dlist_take_def] |
397 val temp = prove_goalw Dlist.thy [dlist_take_def] |
398 "dlist_take (Suc n)`(dcons`x`xl)= dcons`x`(dlist_take n`xl)" |
398 "dlist_take (Suc n)`(dcons`x`xl)= dcons`x`(dlist_take n`xl)" |
399 (fn prems => |
399 (fn prems => |
400 [ |
400 [ |
401 (res_inst_tac [("Q","x=UU")] classical2 1), |
401 (res_inst_tac [("Q","x=UU")] classical2 1), |
402 (asm_simp_tac iterate_ss 1), |
402 (Asm_simp_tac 1), |
403 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
403 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
404 (res_inst_tac [("Q","xl=UU")] classical2 1), |
404 (res_inst_tac [("Q","xl=UU")] classical2 1), |
405 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
405 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
406 (asm_simp_tac iterate_ss 1), |
406 (Asm_simp_tac 1), |
407 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
407 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
408 (res_inst_tac [("n","n")] natE 1), |
408 (res_inst_tac [("n","n")] natE 1), |
409 (asm_simp_tac iterate_ss 1), |
409 (Asm_simp_tac 1), |
410 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
410 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
411 (asm_simp_tac iterate_ss 1), |
411 (Asm_simp_tac 1), |
412 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
412 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
413 (asm_simp_tac iterate_ss 1), |
413 (Asm_simp_tac 1), |
414 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
414 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
415 ]); |
415 ]); |
416 |
416 |
417 val dlist_take = temp::dlist_take; |
417 val dlist_take = temp::dlist_take; |
418 |
418 |
419 val dlist_rews = dlist_take @ dlist_rews; |
419 val dlist_rews = dlist_take @ dlist_rews; |
451 "dlist_bisim R ==> ! p q. R p q --> dlist_take n`p = dlist_take n`q" |
451 "dlist_bisim R ==> ! p q. R p q --> dlist_take n`p = dlist_take n`q" |
452 (fn prems => |
452 (fn prems => |
453 [ |
453 [ |
454 (cut_facts_tac prems 1), |
454 (cut_facts_tac prems 1), |
455 (nat_ind_tac "n" 1), |
455 (nat_ind_tac "n" 1), |
456 (simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
456 (simp_tac (!simpset addsimps dlist_rews) 1), |
457 (strip_tac 1), |
457 (strip_tac 1), |
458 ((etac allE 1) THEN (etac allE 1) THEN (etac (mp RS disjE) 1)), |
458 ((etac allE 1) THEN (etac allE 1) THEN (etac (mp RS disjE) 1)), |
459 (atac 1), |
459 (atac 1), |
460 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
460 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
461 (etac disjE 1), |
461 (etac disjE 1), |
462 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
462 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
463 (etac exE 1), |
463 (etac exE 1), |
464 (etac exE 1), |
464 (etac exE 1), |
465 (etac exE 1), |
465 (etac exE 1), |
466 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
466 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
467 (REPEAT (etac conjE 1)), |
467 (REPEAT (etac conjE 1)), |
468 (rtac cfun_arg_cong 1), |
468 (rtac cfun_arg_cong 1), |
469 (fast_tac HOL_cs 1) |
469 (fast_tac HOL_cs 1) |
470 ]); |
470 ]); |
471 |
471 |
487 \ !! x l1.[|x~=UU;l1~=UU;P(l1)|] ==> P(dcons`x`l1)\ |
487 \ !! x l1.[|x~=UU;l1~=UU;P(l1)|] ==> P(dcons`x`l1)\ |
488 \ |] ==> !l.P(dlist_take n`l)" |
488 \ |] ==> !l.P(dlist_take n`l)" |
489 (fn prems => |
489 (fn prems => |
490 [ |
490 [ |
491 (nat_ind_tac "n" 1), |
491 (nat_ind_tac "n" 1), |
492 (simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
492 (simp_tac (!simpset addsimps dlist_rews) 1), |
493 (resolve_tac prems 1), |
493 (resolve_tac prems 1), |
494 (rtac allI 1), |
494 (rtac allI 1), |
495 (res_inst_tac [("l","l")] dlistE 1), |
495 (res_inst_tac [("l","l")] dlistE 1), |
496 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
496 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
497 (resolve_tac prems 1), |
497 (resolve_tac prems 1), |
498 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
498 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
499 (resolve_tac prems 1), |
499 (resolve_tac prems 1), |
500 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
500 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
501 (res_inst_tac [("Q","dlist_take n1`xl=UU")] classical2 1), |
501 (res_inst_tac [("Q","dlist_take n1`xl=UU")] classical2 1), |
502 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
502 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
503 (resolve_tac prems 1), |
503 (resolve_tac prems 1), |
504 (resolve_tac prems 1), |
504 (resolve_tac prems 1), |
505 (atac 1), |
505 (atac 1), |
506 (atac 1), |
506 (atac 1), |
507 (etac spec 1) |
507 (etac spec 1) |
510 qed_goal "dlist_all_finite_lemma1" Dlist.thy |
510 qed_goal "dlist_all_finite_lemma1" Dlist.thy |
511 "!l.dlist_take n`l=UU |dlist_take n`l=l" |
511 "!l.dlist_take n`l=UU |dlist_take n`l=l" |
512 (fn prems => |
512 (fn prems => |
513 [ |
513 [ |
514 (nat_ind_tac "n" 1), |
514 (nat_ind_tac "n" 1), |
515 (simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
515 (simp_tac (!simpset addsimps dlist_rews) 1), |
516 (rtac allI 1), |
516 (rtac allI 1), |
517 (res_inst_tac [("l","l")] dlistE 1), |
517 (res_inst_tac [("l","l")] dlistE 1), |
518 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
518 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
519 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
519 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
520 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
520 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
521 (eres_inst_tac [("x","xl")] allE 1), |
521 (eres_inst_tac [("x","xl")] allE 1), |
522 (etac disjE 1), |
522 (etac disjE 1), |
523 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
523 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
524 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1) |
524 (asm_simp_tac (!simpset addsimps dlist_rews) 1) |
525 ]); |
525 ]); |
526 |
526 |
527 qed_goal "dlist_all_finite_lemma2" Dlist.thy "? n.dlist_take n`l=l" |
527 qed_goal "dlist_all_finite_lemma2" Dlist.thy "? n.dlist_take n`l=l" |
528 (fn prems => |
528 (fn prems => |
529 [ |
529 [ |
530 (res_inst_tac [("Q","l=UU")] classical2 1), |
530 (res_inst_tac [("Q","l=UU")] classical2 1), |
531 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
531 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
532 (subgoal_tac "(!n.dlist_take n`l=UU) |(? n.dlist_take n`l = l)" 1), |
532 (subgoal_tac "(!n.dlist_take n`l=UU) |(? n.dlist_take n`l = l)" 1), |
533 (etac disjE 1), |
533 (etac disjE 1), |
534 (eres_inst_tac [("P","l=UU")] notE 1), |
534 (eres_inst_tac [("P","l=UU")] notE 1), |
535 (rtac dlist_take_lemma 1), |
535 (rtac dlist_take_lemma 1), |
536 (asm_simp_tac (HOLCF_ss addsimps dlist_rews) 1), |
536 (asm_simp_tac (!simpset addsimps dlist_rews) 1), |
537 (atac 1), |
537 (atac 1), |
538 (subgoal_tac "!n.!l.dlist_take n`l=UU |dlist_take n`l=l" 1), |
538 (subgoal_tac "!n.!l.dlist_take n`l=UU |dlist_take n`l=l" 1), |
539 (fast_tac HOL_cs 1), |
539 (fast_tac HOL_cs 1), |
540 (rtac allI 1), |
540 (rtac allI 1), |
541 (rtac dlist_all_finite_lemma1 1) |
541 (rtac dlist_all_finite_lemma1 1) |