46 |
46 |
47 qed_goalw "Exh_dnat" Dnat.thy [dsucc_def,dzero_def] |
47 qed_goalw "Exh_dnat" Dnat.thy [dsucc_def,dzero_def] |
48 "n = UU | n = dzero | (? x . x~=UU & n = dsucc`x)" |
48 "n = UU | n = dzero | (? x . x~=UU & n = dsucc`x)" |
49 (fn prems => |
49 (fn prems => |
50 [ |
50 [ |
51 (simp_tac HOLCF_ss 1), |
51 (Simp_tac 1), |
52 (rtac (dnat_rep_iso RS subst) 1), |
52 (rtac (dnat_rep_iso RS subst) 1), |
53 (res_inst_tac [("p","dnat_rep`n")] ssumE 1), |
53 (res_inst_tac [("p","dnat_rep`n")] ssumE 1), |
54 (rtac disjI1 1), |
54 (rtac disjI1 1), |
55 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
55 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
56 (rtac (disjI1 RS disjI2) 1), |
56 (rtac (disjI1 RS disjI2) 1), |
57 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
57 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
58 (res_inst_tac [("p","x")] oneE 1), |
58 (res_inst_tac [("p","x")] oneE 1), |
59 (contr_tac 1), |
59 (contr_tac 1), |
60 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
60 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
61 (rtac (disjI2 RS disjI2) 1), |
61 (rtac (disjI2 RS disjI2) 1), |
62 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
62 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
63 (fast_tac HOL_cs 1) |
63 (fast_tac HOL_cs 1) |
64 ]); |
64 ]); |
65 |
65 |
66 qed_goal "dnatE" Dnat.thy |
66 qed_goal "dnatE" Dnat.thy |
67 "[| n=UU ==> Q; n=dzero ==> Q; !!x.[|n=dsucc`x;x~=UU|]==>Q|]==>Q" |
67 "[| n=UU ==> Q; n=dzero ==> Q; !!x.[|n=dsucc`x;x~=UU|]==>Q|]==>Q" |
140 |
140 |
141 fun prover contr thm = prove_goal Dnat.thy thm |
141 fun prover contr thm = prove_goal Dnat.thy thm |
142 (fn prems => |
142 (fn prems => |
143 [ |
143 [ |
144 (res_inst_tac [("P1",contr)] classical3 1), |
144 (res_inst_tac [("P1",contr)] classical3 1), |
145 (simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
145 (simp_tac (!simpset addsimps dnat_rews) 1), |
146 (dtac sym 1), |
146 (dtac sym 1), |
147 (asm_simp_tac HOLCF_ss 1), |
147 (Asm_simp_tac 1), |
148 (simp_tac (HOLCF_ss addsimps (prems @ dnat_rews)) 1) |
148 (simp_tac (!simpset addsimps (prems @ dnat_rews)) 1) |
149 ]); |
149 ]); |
150 |
150 |
151 val dnat_constrdef = [ |
151 val dnat_constrdef = [ |
152 prover "is_dzero`UU ~= UU" "dzero~=UU", |
152 prover "is_dzero`UU ~= UU" "dzero~=UU", |
153 prover "is_dsucc`UU ~= UU" "n~=UU ==> dsucc`n~=UU" |
153 prover "is_dsucc`UU ~= UU" "n~=UU ==> dsucc`n~=UU" |
176 [ |
176 [ |
177 (res_inst_tac [("P1","TT << FF")] classical3 1), |
177 (res_inst_tac [("P1","TT << FF")] classical3 1), |
178 (resolve_tac dist_less_tr 1), |
178 (resolve_tac dist_less_tr 1), |
179 (dres_inst_tac [("fo5","is_dzero")] monofun_cfun_arg 1), |
179 (dres_inst_tac [("fo5","is_dzero")] monofun_cfun_arg 1), |
180 (etac box_less 1), |
180 (etac box_less 1), |
181 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
181 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
182 (res_inst_tac [("Q","n=UU")] classical2 1), |
182 (res_inst_tac [("Q","n=UU")] classical2 1), |
183 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
183 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
184 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
184 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
185 ]); |
185 ]); |
186 |
186 |
187 val dnat_dist_less = [temp]; |
187 val dnat_dist_less = [temp]; |
188 |
188 |
189 val temp = prove_goal Dnat.thy "n~=UU ==> ~dsucc`n << dzero" |
189 val temp = prove_goal Dnat.thy "n~=UU ==> ~dsucc`n << dzero" |
192 (cut_facts_tac prems 1), |
192 (cut_facts_tac prems 1), |
193 (res_inst_tac [("P1","TT << FF")] classical3 1), |
193 (res_inst_tac [("P1","TT << FF")] classical3 1), |
194 (resolve_tac dist_less_tr 1), |
194 (resolve_tac dist_less_tr 1), |
195 (dres_inst_tac [("fo5","is_dsucc")] monofun_cfun_arg 1), |
195 (dres_inst_tac [("fo5","is_dsucc")] monofun_cfun_arg 1), |
196 (etac box_less 1), |
196 (etac box_less 1), |
197 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
197 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
198 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
198 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
199 ]); |
199 ]); |
200 |
200 |
201 val dnat_dist_less = temp::dnat_dist_less; |
201 val dnat_dist_less = temp::dnat_dist_less; |
202 |
202 |
203 val temp = prove_goal Dnat.thy "dzero ~= dsucc`n" |
203 val temp = prove_goal Dnat.thy "dzero ~= dsucc`n" |
204 (fn prems => |
204 (fn prems => |
205 [ |
205 [ |
206 (res_inst_tac [("Q","n=UU")] classical2 1), |
206 (res_inst_tac [("Q","n=UU")] classical2 1), |
207 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
207 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
208 (res_inst_tac [("P1","TT = FF")] classical3 1), |
208 (res_inst_tac [("P1","TT = FF")] classical3 1), |
209 (resolve_tac dist_eq_tr 1), |
209 (resolve_tac dist_eq_tr 1), |
210 (dres_inst_tac [("f","is_dzero")] cfun_arg_cong 1), |
210 (dres_inst_tac [("f","is_dzero")] cfun_arg_cong 1), |
211 (etac box_equals 1), |
211 (etac box_equals 1), |
212 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
212 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
213 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
213 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
214 ]); |
214 ]); |
215 |
215 |
216 val dnat_dist_eq = [temp, temp RS not_sym]; |
216 val dnat_dist_eq = [temp, temp RS not_sym]; |
217 |
217 |
218 val dnat_rews = dnat_dist_less @ dnat_dist_eq @ dnat_rews; |
218 val dnat_rews = dnat_dist_less @ dnat_dist_eq @ dnat_rews; |
228 (fn prems => |
228 (fn prems => |
229 [ |
229 [ |
230 (cut_facts_tac prems 1), |
230 (cut_facts_tac prems 1), |
231 (dres_inst_tac [("fo5","dnat_when`c`(LAM x.x)")] monofun_cfun_arg 1), |
231 (dres_inst_tac [("fo5","dnat_when`c`(LAM x.x)")] monofun_cfun_arg 1), |
232 (etac box_less 1), |
232 (etac box_less 1), |
233 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
233 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
234 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
234 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
235 ]) |
235 ]) |
236 ]; |
236 ]; |
237 |
237 |
238 (* ------------------------------------------------------------------------*) |
238 (* ------------------------------------------------------------------------*) |
239 (* Injectivity *) |
239 (* Injectivity *) |
246 (fn prems => |
246 (fn prems => |
247 [ |
247 [ |
248 (cut_facts_tac prems 1), |
248 (cut_facts_tac prems 1), |
249 (dres_inst_tac [("f","dnat_when`c`(LAM x.x)")] cfun_arg_cong 1), |
249 (dres_inst_tac [("f","dnat_when`c`(LAM x.x)")] cfun_arg_cong 1), |
250 (etac box_equals 1), |
250 (etac box_equals 1), |
251 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
251 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
252 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
252 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
253 ]) |
253 ]) |
254 ]; |
254 ]; |
255 |
255 |
256 (* ------------------------------------------------------------------------*) |
256 (* ------------------------------------------------------------------------*) |
257 (* definedness for discriminators and selectors *) |
257 (* definedness for discriminators and selectors *) |
281 (* ------------------------------------------------------------------------*) |
281 (* ------------------------------------------------------------------------*) |
282 val temp = prove_goalw Dnat.thy [dnat_take_def] "dnat_take n`UU = UU" |
282 val temp = prove_goalw Dnat.thy [dnat_take_def] "dnat_take n`UU = UU" |
283 (fn prems => |
283 (fn prems => |
284 [ |
284 [ |
285 (res_inst_tac [("n","n")] natE 1), |
285 (res_inst_tac [("n","n")] natE 1), |
286 (asm_simp_tac iterate_ss 1), |
286 (Asm_simp_tac 1), |
287 (asm_simp_tac iterate_ss 1), |
287 (Asm_simp_tac 1), |
288 (simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
288 (simp_tac (!simpset addsimps dnat_rews) 1) |
289 ]); |
289 ]); |
290 |
290 |
291 val dnat_take = [temp]; |
291 val dnat_take = [temp]; |
292 |
292 |
293 val temp = prove_goalw Dnat.thy [dnat_take_def] "dnat_take 0`xs = UU" |
293 val temp = prove_goalw Dnat.thy [dnat_take_def] "dnat_take 0`xs = UU" |
294 (fn prems => |
294 (fn prems => |
295 [ |
295 [ |
296 (asm_simp_tac iterate_ss 1) |
296 (Asm_simp_tac 1) |
297 ]); |
297 ]); |
298 |
298 |
299 val dnat_take = temp::dnat_take; |
299 val dnat_take = temp::dnat_take; |
300 |
300 |
301 val temp = prove_goalw Dnat.thy [dnat_take_def] |
301 val temp = prove_goalw Dnat.thy [dnat_take_def] |
302 "dnat_take (Suc n)`dzero=dzero" |
302 "dnat_take (Suc n)`dzero=dzero" |
303 (fn prems => |
303 (fn prems => |
304 [ |
304 [ |
305 (asm_simp_tac iterate_ss 1), |
305 (Asm_simp_tac 1), |
306 (simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
306 (simp_tac (!simpset addsimps dnat_rews) 1) |
307 ]); |
307 ]); |
308 |
308 |
309 val dnat_take = temp::dnat_take; |
309 val dnat_take = temp::dnat_take; |
310 |
310 |
311 val temp = prove_goalw Dnat.thy [dnat_take_def] |
311 val temp = prove_goalw Dnat.thy [dnat_take_def] |
312 "dnat_take (Suc n)`(dsucc`xs)=dsucc`(dnat_take n ` xs)" |
312 "dnat_take (Suc n)`(dsucc`xs)=dsucc`(dnat_take n ` xs)" |
313 (fn prems => |
313 (fn prems => |
314 [ |
314 [ |
315 (res_inst_tac [("Q","xs=UU")] classical2 1), |
315 (res_inst_tac [("Q","xs=UU")] classical2 1), |
316 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
316 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
317 (asm_simp_tac iterate_ss 1), |
317 (Asm_simp_tac 1), |
318 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
318 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
319 (res_inst_tac [("n","n")] natE 1), |
319 (res_inst_tac [("n","n")] natE 1), |
320 (asm_simp_tac iterate_ss 1), |
320 (Asm_simp_tac 1), |
321 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
321 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
322 (asm_simp_tac iterate_ss 1), |
322 (Asm_simp_tac 1), |
323 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
323 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
324 (asm_simp_tac iterate_ss 1), |
324 (Asm_simp_tac 1), |
325 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
325 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
326 ]); |
326 ]); |
327 |
327 |
328 val dnat_take = temp::dnat_take; |
328 val dnat_take = temp::dnat_take; |
329 |
329 |
330 val dnat_rews = dnat_take @ dnat_rews; |
330 val dnat_rews = dnat_take @ dnat_rews; |
363 "dnat_bisim R ==> ! p q. R p q --> dnat_take n`p = dnat_take n`q" |
363 "dnat_bisim R ==> ! p q. R p q --> dnat_take n`p = dnat_take n`q" |
364 (fn prems => |
364 (fn prems => |
365 [ |
365 [ |
366 (cut_facts_tac prems 1), |
366 (cut_facts_tac prems 1), |
367 (nat_ind_tac "n" 1), |
367 (nat_ind_tac "n" 1), |
368 (simp_tac (HOLCF_ss addsimps dnat_take) 1), |
368 (simp_tac (!simpset addsimps dnat_take) 1), |
369 (strip_tac 1), |
369 (strip_tac 1), |
370 ((etac allE 1) THEN (etac allE 1) THEN (etac (mp RS disjE) 1)), |
370 ((etac allE 1) THEN (etac allE 1) THEN (etac (mp RS disjE) 1)), |
371 (atac 1), |
371 (atac 1), |
372 (asm_simp_tac (HOLCF_ss addsimps dnat_take) 1), |
372 (asm_simp_tac (!simpset addsimps dnat_take) 1), |
373 (etac disjE 1), |
373 (etac disjE 1), |
374 (asm_simp_tac (HOLCF_ss addsimps dnat_take) 1), |
374 (asm_simp_tac (!simpset addsimps dnat_take) 1), |
375 (etac exE 1), |
375 (etac exE 1), |
376 (etac exE 1), |
376 (etac exE 1), |
377 (asm_simp_tac (HOLCF_ss addsimps dnat_take) 1), |
377 (asm_simp_tac (!simpset addsimps dnat_take) 1), |
378 (REPEAT (etac conjE 1)), |
378 (REPEAT (etac conjE 1)), |
379 (rtac cfun_arg_cong 1), |
379 (rtac cfun_arg_cong 1), |
380 (fast_tac HOL_cs 1) |
380 (fast_tac HOL_cs 1) |
381 ]); |
381 ]); |
382 |
382 |
407 (rtac fix_ind 1), |
407 (rtac fix_ind 1), |
408 (rtac adm_all2 1), |
408 (rtac adm_all2 1), |
409 (rtac adm_subst 1), |
409 (rtac adm_subst 1), |
410 (cont_tacR 1), |
410 (cont_tacR 1), |
411 (resolve_tac prems 1), |
411 (resolve_tac prems 1), |
412 (simp_tac HOLCF_ss 1), |
412 (Simp_tac 1), |
413 (resolve_tac prems 1), |
413 (resolve_tac prems 1), |
414 (strip_tac 1), |
414 (strip_tac 1), |
415 (res_inst_tac [("n","xa")] dnatE 1), |
415 (res_inst_tac [("n","xa")] dnatE 1), |
416 (asm_simp_tac (HOLCF_ss addsimps dnat_copy) 1), |
416 (asm_simp_tac (!simpset addsimps dnat_copy) 1), |
417 (resolve_tac prems 1), |
417 (resolve_tac prems 1), |
418 (asm_simp_tac (HOLCF_ss addsimps dnat_copy) 1), |
418 (asm_simp_tac (!simpset addsimps dnat_copy) 1), |
419 (resolve_tac prems 1), |
419 (resolve_tac prems 1), |
420 (asm_simp_tac (HOLCF_ss addsimps dnat_copy) 1), |
420 (asm_simp_tac (!simpset addsimps dnat_copy) 1), |
421 (res_inst_tac [("Q","x`xb=UU")] classical2 1), |
421 (res_inst_tac [("Q","x`xb=UU")] classical2 1), |
422 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
422 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
423 (resolve_tac prems 1), |
423 (resolve_tac prems 1), |
424 (eresolve_tac prems 1), |
424 (eresolve_tac prems 1), |
425 (etac spec 1) |
425 (etac spec 1) |
426 ]); |
426 ]); |
427 *) |
427 *) |
431 \ !! s1.[|s1~=UU;P(s1)|] ==> P(dsucc`s1)\ |
431 \ !! s1.[|s1~=UU;P(s1)|] ==> P(dsucc`s1)\ |
432 \ |] ==> !s.P(dnat_take n`s)" |
432 \ |] ==> !s.P(dnat_take n`s)" |
433 (fn prems => |
433 (fn prems => |
434 [ |
434 [ |
435 (nat_ind_tac "n" 1), |
435 (nat_ind_tac "n" 1), |
436 (simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
436 (simp_tac (!simpset addsimps dnat_rews) 1), |
437 (resolve_tac prems 1), |
437 (resolve_tac prems 1), |
438 (rtac allI 1), |
438 (rtac allI 1), |
439 (res_inst_tac [("n","s")] dnatE 1), |
439 (res_inst_tac [("n","s")] dnatE 1), |
440 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
440 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
441 (resolve_tac prems 1), |
441 (resolve_tac prems 1), |
442 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
442 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
443 (resolve_tac prems 1), |
443 (resolve_tac prems 1), |
444 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
444 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
445 (res_inst_tac [("Q","dnat_take n1`x=UU")] classical2 1), |
445 (res_inst_tac [("Q","dnat_take n1`x=UU")] classical2 1), |
446 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
446 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
447 (resolve_tac prems 1), |
447 (resolve_tac prems 1), |
448 (resolve_tac prems 1), |
448 (resolve_tac prems 1), |
449 (atac 1), |
449 (atac 1), |
450 (etac spec 1) |
450 (etac spec 1) |
451 ]); |
451 ]); |
453 qed_goal "dnat_all_finite_lemma1" Dnat.thy |
453 qed_goal "dnat_all_finite_lemma1" Dnat.thy |
454 "!s.dnat_take n`s=UU |dnat_take n`s=s" |
454 "!s.dnat_take n`s=UU |dnat_take n`s=s" |
455 (fn prems => |
455 (fn prems => |
456 [ |
456 [ |
457 (nat_ind_tac "n" 1), |
457 (nat_ind_tac "n" 1), |
458 (simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
458 (simp_tac (!simpset addsimps dnat_rews) 1), |
459 (rtac allI 1), |
459 (rtac allI 1), |
460 (res_inst_tac [("n","s")] dnatE 1), |
460 (res_inst_tac [("n","s")] dnatE 1), |
461 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
461 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
462 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
462 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
463 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
463 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
464 (eres_inst_tac [("x","x")] allE 1), |
464 (eres_inst_tac [("x","x")] allE 1), |
465 (etac disjE 1), |
465 (etac disjE 1), |
466 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
466 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
467 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1) |
467 (asm_simp_tac (!simpset addsimps dnat_rews) 1) |
468 ]); |
468 ]); |
469 |
469 |
470 qed_goal "dnat_all_finite_lemma2" Dnat.thy "? n.dnat_take n`s=s" |
470 qed_goal "dnat_all_finite_lemma2" Dnat.thy "? n.dnat_take n`s=s" |
471 (fn prems => |
471 (fn prems => |
472 [ |
472 [ |
473 (res_inst_tac [("Q","s=UU")] classical2 1), |
473 (res_inst_tac [("Q","s=UU")] classical2 1), |
474 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
474 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
475 (subgoal_tac "(!n.dnat_take(n)`s=UU) |(? n.dnat_take(n)`s=s)" 1), |
475 (subgoal_tac "(!n.dnat_take(n)`s=UU) |(? n.dnat_take(n)`s=s)" 1), |
476 (etac disjE 1), |
476 (etac disjE 1), |
477 (eres_inst_tac [("P","s=UU")] notE 1), |
477 (eres_inst_tac [("P","s=UU")] notE 1), |
478 (rtac dnat_take_lemma 1), |
478 (rtac dnat_take_lemma 1), |
479 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
479 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
480 (atac 1), |
480 (atac 1), |
481 (subgoal_tac "!n.!s.dnat_take(n)`s=UU |dnat_take(n)`s=s" 1), |
481 (subgoal_tac "!n.!s.dnat_take(n)`s=UU |dnat_take(n)`s=s" 1), |
482 (fast_tac HOL_cs 1), |
482 (fast_tac HOL_cs 1), |
483 (rtac allI 1), |
483 (rtac allI 1), |
484 (rtac dnat_all_finite_lemma1 1) |
484 (rtac dnat_all_finite_lemma1 1) |
506 (res_inst_tac [("s","x")] dnat_ind 1), |
506 (res_inst_tac [("s","x")] dnat_ind 1), |
507 (fast_tac HOL_cs 1), |
507 (fast_tac HOL_cs 1), |
508 (rtac allI 1), |
508 (rtac allI 1), |
509 (res_inst_tac [("n","y")] dnatE 1), |
509 (res_inst_tac [("n","y")] dnatE 1), |
510 (fast_tac (HOL_cs addSIs [UU_I]) 1), |
510 (fast_tac (HOL_cs addSIs [UU_I]) 1), |
511 (asm_simp_tac HOLCF_ss 1), |
511 (Asm_simp_tac 1), |
512 (asm_simp_tac (HOLCF_ss addsimps dnat_dist_less) 1), |
512 (asm_simp_tac (!simpset addsimps dnat_dist_less) 1), |
513 (rtac allI 1), |
513 (rtac allI 1), |
514 (res_inst_tac [("n","y")] dnatE 1), |
514 (res_inst_tac [("n","y")] dnatE 1), |
515 (fast_tac (HOL_cs addSIs [UU_I]) 1), |
515 (fast_tac (HOL_cs addSIs [UU_I]) 1), |
516 (asm_simp_tac (HOLCF_ss addsimps dnat_dist_less) 1), |
516 (asm_simp_tac (!simpset addsimps dnat_dist_less) 1), |
517 (asm_simp_tac (HOLCF_ss addsimps dnat_rews) 1), |
517 (asm_simp_tac (!simpset addsimps dnat_rews) 1), |
518 (strip_tac 1), |
518 (strip_tac 1), |
519 (subgoal_tac "s1<<xa" 1), |
519 (subgoal_tac "s1<<xa" 1), |
520 (etac allE 1), |
520 (etac allE 1), |
521 (dtac mp 1), |
521 (dtac mp 1), |
522 (atac 1), |
522 (atac 1), |
523 (etac disjE 1), |
523 (etac disjE 1), |
524 (contr_tac 1), |
524 (contr_tac 1), |
525 (asm_simp_tac HOLCF_ss 1), |
525 (Asm_simp_tac 1), |
526 (resolve_tac dnat_invert 1), |
526 (resolve_tac dnat_invert 1), |
527 (REPEAT (atac 1)) |
527 (REPEAT (atac 1)) |
528 ]); |
528 ]); |
529 |
529 |
530 |
530 |