# HG changeset patch # User huffman # Date 1213303263 -7200 # Node ID 416d66c36d8f62f9ef104db430801dd9eba89426 # Parent 0407630909eff96549a71a2fecf404188319b322 add lemma finite_image_approx; remove unnecessary sort annotations diff -r 0407630909ef -r 416d66c36d8f src/HOLCF/Bifinite.thy --- a/src/HOLCF/Bifinite.thy Thu Jun 12 22:30:00 2008 +0200 +++ b/src/HOLCF/Bifinite.thy Thu Jun 12 22:41:03 2008 +0200 @@ -27,18 +27,17 @@ apply (clarify, erule subst, rule exI, rule refl) done -lemma chain_approx [simp]: - "chain (approx :: nat \ 'a::profinite \ 'a)" +lemma chain_approx [simp]: "chain approx" apply (rule chainI) apply (rule less_cfun_ext) apply (rule chainE) apply (rule chain_approx_app) done -lemma lub_approx [simp]: "(\i. approx i) = (\(x::'a::profinite). x)" +lemma lub_approx [simp]: "(\i. approx i) = (\ x. x)" by (rule ext_cfun, simp add: contlub_cfun_fun) -lemma approx_less: "approx i\x \ (x::'a::profinite)" +lemma approx_less: "approx i\x \ x" apply (subgoal_tac "approx i\x \ (\i. approx i\x)", simp) apply (rule is_ub_thelub, simp) done @@ -47,7 +46,7 @@ by (rule UU_I, rule approx_less) lemma approx_approx1: - "i \ j \ approx i\(approx j\x) = approx i\(x::'a::profinite)" + "i \ j \ approx i\(approx j\x) = approx i\x" apply (rule antisym_less) apply (rule monofun_cfun_arg [OF approx_less]) apply (rule sq_ord_eq_less_trans [OF approx_idem [symmetric]]) @@ -57,7 +56,7 @@ done lemma approx_approx2: - "j \ i \ approx i\(approx j\x) = approx j\(x::'a::profinite)" + "j \ i \ approx i\(approx j\x) = approx j\x" apply (rule antisym_less) apply (rule approx_less) apply (rule sq_ord_eq_less_trans [OF approx_idem [symmetric]]) @@ -66,7 +65,7 @@ done lemma approx_approx [simp]: - "approx i\(approx j\x) = approx (min i j)\(x::'a::profinite)" + "approx i\(approx j\x) = approx (min i j)\x" apply (rule_tac x=i and y=j in linorder_le_cases) apply (simp add: approx_approx1 min_def) apply (simp add: approx_approx2 min_def) @@ -76,16 +75,16 @@ "\x. f (f x) = f x \ {x. f x = x} = {y. \x. y = f x}" by (auto simp add: eq_sym_conv) -lemma finite_approx: "finite {y::'a::profinite. \x. y = approx n\x}" +lemma finite_approx: "finite {y. \x. y = approx n\x}" using finite_fixes_approx by (simp add: idem_fixes_eq_range) -lemma finite_range_approx: - "finite (range (\x::'a::profinite. approx n\x))" -by (simp add: image_def finite_approx) +lemma finite_image_approx: "finite ((\x. approx n\x) ` A)" +by (rule finite_subset [OF _ finite_fixes_approx [where i=n]]) auto -lemma compact_approx [simp]: - fixes x :: "'a::profinite" - shows "compact (approx n\x)" +lemma finite_range_approx: "finite (range (\x. approx n\x))" +by (rule finite_image_approx) + +lemma compact_approx [simp]: "compact (approx n\x)" proof (rule compactI2) fix Y::"nat \ 'a" assume Y: "chain Y" @@ -115,7 +114,6 @@ qed lemma bifinite_compact_eq_approx: - fixes x :: "'a::profinite" assumes x: "compact x" shows "\i. approx i\x = x" proof - @@ -129,7 +127,7 @@ qed lemma bifinite_compact_iff: - "compact (x::'a::profinite) = (\n. approx n\x = x)" + "compact x \ (\n. approx n\x = x)" apply (rule iffI) apply (erule bifinite_compact_eq_approx) apply (erule exE) @@ -139,16 +137,14 @@ lemma approx_induct: assumes adm: "adm P" and P: "\n x. P (approx n\x)" - shows "P (x::'a::profinite)" + shows "P x" proof - have "P (\n. approx n\x)" by (rule admD [OF adm], simp, simp add: P) thus "P x" by simp qed -lemma bifinite_less_ext: - fixes x y :: "'a::profinite" - shows "(\i. approx i\x \ approx i\y) \ x \ y" +lemma bifinite_less_ext: "(\i. approx i\x \ approx i\y) \ x \ y" apply (subgoal_tac "(\i. approx i\x) \ (\i. approx i\y)", simp) apply (rule lub_mono, simp, simp, simp) done