equal
deleted
inserted
replaced
416 "~ lam x. f(x) [= true" |
416 "~ lam x. f(x) [= true" |
417 "~ false [= <a,b>" |
417 "~ false [= <a,b>" |
418 "~ <a,b> [= false" |
418 "~ <a,b> [= false" |
419 "~ false [= lam x. f(x)" |
419 "~ false [= lam x. f(x)" |
420 "~ lam x. f(x) [= false" |
420 "~ lam x. f(x) [= false" |
421 by (tactic {* |
421 by (rule notI, drule case_pocong, erule_tac [5] rev_mp, simp_all, |
422 REPEAT (rtac @{thm notI} 1 THEN |
422 (rule po_refl npo_lam_bot)+)+ |
423 dtac @{thm case_pocong} 1 THEN |
|
424 etac @{thm rev_mp} 5 THEN |
|
425 ALLGOALS (simp_tac @{context}) THEN |
|
426 REPEAT (resolve_tac [@{thm po_refl}, @{thm npo_lam_bot}] 1)) *}) |
|
427 |
423 |
428 lemmas npo_rls = npo_pair_lam npo_lam_pair npo_rls1 |
424 lemmas npo_rls = npo_pair_lam npo_lam_pair npo_rls1 |
429 |
425 |
430 |
426 |
431 subsection {* Coinduction for @{text "[="} *} |
427 subsection {* Coinduction for @{text "[="} *} |
474 "[| <t,u> : R; R <= EQgen(lfp(%x. EQgen(x) Un R Un EQ)) |] ==> t = u" |
470 "[| <t,u> : R; R <= EQgen(lfp(%x. EQgen(x) Un R Un EQ)) |] ==> t = u" |
475 apply (rule EQ_def [THEN def_coinduct3, THEN EQ_iff [THEN iffD2]]) |
471 apply (rule EQ_def [THEN def_coinduct3, THEN EQ_iff [THEN iffD2]]) |
476 apply (rule EQgen_mono | assumption)+ |
472 apply (rule EQgen_mono | assumption)+ |
477 done |
473 done |
478 |
474 |
479 ML {* |
475 method_setup eq_coinduct3 = {* |
480 fun eq_coinduct_tac ctxt s i = res_inst_tac ctxt [(("R", 0), s)] @{thm eq_coinduct} i |
476 Scan.lift Args.name >> (fn s => fn ctxt => |
481 fun eq_coinduct3_tac ctxt s i = res_inst_tac ctxt [(("R", 0), s)] @{thm eq_coinduct3} i |
477 SIMPLE_METHOD' (res_inst_tac ctxt [(("R", 0), s)] @{thm eq_coinduct3})) |
482 *} |
478 *} |
483 |
479 |
484 |
480 |
485 subsection {* Untyped Case Analysis and Other Facts *} |
481 subsection {* Untyped Case Analysis and Other Facts *} |
486 |
482 |