# HG changeset patch # User huffman # Date 1213302600 -7200 # Node ID 0407630909eff96549a71a2fecf404188319b322 # Parent b1483d423512074ca07eca7c8a4a5356a376a166 change orientation of fix_eqI and convert to rule_format; add lemma fix_ind2 diff -r b1483d423512 -r 0407630909ef src/HOLCF/Fix.thy --- a/src/HOLCF/Fix.thy Thu Jun 12 22:29:51 2008 +0200 +++ b/src/HOLCF/Fix.thy Thu Jun 12 22:30:00 2008 +0200 @@ -106,10 +106,12 @@ lemma fix_least: "F\x = x \ fix\F \ x" by (rule fix_least_less, simp) -lemma fix_eqI: "\F\x = x; \z. F\z = z \ x \ z\ \ x = fix\F" +lemma fix_eqI: + assumes fixed: "F\x = x" and least: "\z. F\z = z \ x \ z" + shows "fix\F = x" apply (rule antisym_less) -apply (simp add: fix_eq [symmetric]) -apply (erule fix_least) +apply (rule fix_least [OF fixed]) +apply (rule least [OF fix_eq [symmetric]]) done lemma fix_eq2: "f \ fix\F \ f = F\f" @@ -152,16 +154,32 @@ subsection {* Fixed point induction *} lemma fix_ind: "\adm P; P \; \x. P x \ P (F\x)\ \ P (fix\F)" -apply (subst fix_def2) +unfolding fix_def2 apply (erule admD) apply (rule chain_iterate) -apply (induct_tac "i", simp_all) +apply (rule nat_induct, simp_all) done lemma def_fix_ind: "\f \ fix\F; adm P; P \; \x. P x \ P (F\x)\ \ P f" by (simp add: fix_ind) +lemma fix_ind2: + assumes adm: "adm P" + assumes 0: "P \" and 1: "P (F\\)" + assumes step: "\x. \P x; P (F\x)\ \ P (F\(F\x))" + shows "P (fix\F)" +unfolding fix_def2 +apply (rule admD [OF adm chain_iterate]) +apply (rule nat_less_induct) +apply (case_tac n) +apply (simp add: 0) +apply (case_tac nat) +apply (simp add: 1) +apply (frule_tac x=nat in spec) +apply (simp add: step) +done + subsection {* Recursive let bindings *} definition @@ -198,7 +216,7 @@ \\ x. cfst\(F\\x, \ y. csnd\(F\\x, y\)\), \ y. csnd\(F\\\ x. cfst\(F\\x, \ y. csnd\(F\\x, y\)\), y\)\" (is "fix\F = \?x, ?y\") -proof (rule fix_eqI [rule_format, symmetric]) +proof (rule fix_eqI) have 1: "cfst\(F\\?x, ?y\) = ?x" by (rule trans [symmetric, OF fix_eq], simp) have 2: "csnd\(F\\?x, ?y\) = ?y" diff -r b1483d423512 -r 0407630909ef src/HOLCF/ex/Focus_ex.thy --- a/src/HOLCF/ex/Focus_ex.thy Thu Jun 12 22:29:51 2008 +0200 +++ b/src/HOLCF/ex/Focus_ex.thy Thu Jun 12 22:30:00 2008 +0200 @@ -224,17 +224,17 @@ apply (subgoal_tac "fix$ (LAM k. csnd$ (f$)) = z") apply simp apply (subgoal_tac "! w y. f$ = --> z << w") -apply (rule sym) apply (rule fix_eqI) apply simp -apply (rule allI) -apply (tactic "simp_tac HOLCF_ss 1") -apply (intro strip) +(*apply (rule allI)*) +(*apply (tactic "simp_tac HOLCF_ss 1")*) +(*apply (intro strip)*) apply (subgoal_tac "f$ = ) ,za>") apply fast apply (rule trans) apply (rule surjective_pairing_Cprod2 [symmetric]) -apply (erule cfun_arg_cong) +apply (rule cfun_arg_cong) +apply simp apply (intro strip) apply (erule allE)+ apply (erule mp)