# HG changeset patch # User huffman # Date 1206567497 -3600 # Node ID 562a1d6153364392549ba1423d4aad40bfc6bc2b # Parent be5b78d9580145622b6675e8c4db6719c7ff03d1 rename class bifinite_cpo to profinite; generalize powerdomains from bifinite to profinite diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/Bifinite.thy --- a/src/HOLCF/Bifinite.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/Bifinite.thy Wed Mar 26 22:38:17 2008 +0100 @@ -9,19 +9,19 @@ imports Cfun begin -subsection {* Bifinite domains *} +subsection {* Omega-profinite and bifinite domains *} axclass approx < cpo consts approx :: "nat \ 'a::approx \ 'a" -axclass bifinite_cpo < approx +axclass profinite < approx chain_approx_app: "chain (\i. approx i\x)" lub_approx_app [simp]: "(\i. approx i\x) = x" approx_idem: "approx i\(approx i\x) = approx i\x" finite_fixes_approx: "finite {x. approx i\x = x}" -axclass bifinite < bifinite_cpo, pcpo +axclass bifinite < profinite, pcpo lemma finite_range_imp_finite_fixes: "finite {x. \y. x = f y} \ finite {x. f x = x}" @@ -31,17 +31,17 @@ done lemma chain_approx [simp]: - "chain (approx :: nat \ 'a::bifinite_cpo \ 'a)" + "chain (approx :: nat \ 'a::profinite \ 'a)" 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::bifinite_cpo). x)" +lemma lub_approx [simp]: "(\i. approx i) = (\(x::'a::profinite). x)" by (rule ext_cfun, simp add: contlub_cfun_fun) -lemma approx_less: "approx i\x \ (x::'a::bifinite_cpo)" +lemma approx_less: "approx i\x \ (x::'a::profinite)" apply (subgoal_tac "approx i\x \ (\i. approx i\x)", simp) apply (rule is_ub_thelub, simp) done @@ -50,7 +50,7 @@ by (rule UU_I, rule approx_less) lemma approx_approx1: - "i \ j \ approx i\(approx j\x) = approx i\(x::'a::bifinite_cpo)" + "i \ j \ approx i\(approx j\x) = approx i\(x::'a::profinite)" apply (rule antisym_less) apply (rule monofun_cfun_arg [OF approx_less]) apply (rule sq_ord_eq_less_trans [OF approx_idem [symmetric]]) @@ -60,7 +60,7 @@ done lemma approx_approx2: - "j \ i \ approx i\(approx j\x) = approx j\(x::'a::bifinite_cpo)" + "j \ i \ approx i\(approx j\x) = approx j\(x::'a::profinite)" apply (rule antisym_less) apply (rule approx_less) apply (rule sq_ord_eq_less_trans [OF approx_idem [symmetric]]) @@ -69,7 +69,7 @@ done lemma approx_approx [simp]: - "approx i\(approx j\x) = approx (min i j)\(x::'a::bifinite_cpo)" + "approx i\(approx j\x) = approx (min i j)\(x::'a::profinite)" 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) @@ -79,15 +79,15 @@ "\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::bifinite_cpo. \x. y = approx n\x}" +lemma finite_approx: "finite {y::'a::profinite. \x. y = approx n\x}" using finite_fixes_approx by (simp add: idem_fixes_eq_range) lemma finite_range_approx: - "finite (range (\x::'a::bifinite_cpo. approx n\x))" + "finite (range (\x::'a::profinite. approx n\x))" by (simp add: image_def finite_approx) lemma compact_approx [simp]: - fixes x :: "'a::bifinite_cpo" + fixes x :: "'a::profinite" shows "compact (approx n\x)" proof (rule compactI2) fix Y::"nat \ 'a" @@ -118,7 +118,7 @@ qed lemma bifinite_compact_eq_approx: - fixes x :: "'a::bifinite_cpo" + fixes x :: "'a::profinite" assumes x: "compact x" shows "\i. approx i\x = x" proof - @@ -132,7 +132,7 @@ qed lemma bifinite_compact_iff: - "compact (x::'a::bifinite_cpo) = (\n. approx n\x = x)" + "compact (x::'a::profinite) = (\n. approx n\x = x)" apply (rule iffI) apply (erule bifinite_compact_eq_approx) apply (erule exE) @@ -142,7 +142,7 @@ lemma approx_induct: assumes adm: "adm P" and P: "\n x. P (approx n\x)" - shows "P (x::'a::bifinite)" + shows "P (x::'a::profinite)" proof - have "P (\n. approx n\x)" by (rule admD [OF adm], simp, simp add: P) @@ -150,7 +150,7 @@ qed lemma bifinite_less_ext: - fixes x y :: "'a::bifinite_cpo" + fixes x y :: "'a::profinite" shows "(\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) @@ -178,13 +178,13 @@ apply clarsimp done -instance "->" :: (bifinite_cpo, bifinite_cpo) approx .. +instance "->" :: (profinite, profinite) approx .. defs (overloaded) approx_cfun_def: "approx \ \n. \ f x. approx n\(f\(approx n\x))" -instance "->" :: (bifinite_cpo, bifinite_cpo) bifinite_cpo +instance "->" :: (profinite, profinite) profinite apply (intro_classes, unfold approx_cfun_def) apply simp apply (simp add: lub_distribs eta_cfun) @@ -194,7 +194,7 @@ apply (intro finite_range_lemma finite_approx) done -instance "->" :: (bifinite_cpo, bifinite) bifinite .. +instance "->" :: (profinite, bifinite) bifinite .. lemma approx_cfun: "approx n\f\x = approx n\(f\(approx n\x))" by (simp add: approx_cfun_def) diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/CompactBasis.thy --- a/src/HOLCF/CompactBasis.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/CompactBasis.thy Wed Mar 26 22:38:17 2008 +0100 @@ -355,9 +355,9 @@ subsection {* Compact bases of bifinite domains *} -defaultsort bifinite +defaultsort profinite -typedef (open) 'a compact_basis = "{x::'a::bifinite. compact x}" +typedef (open) 'a compact_basis = "{x::'a::profinite. compact x}" by (fast intro: compact_approx) lemma compact_Rep_compact_basis [simp]: "compact (Rep_compact_basis a)" @@ -393,7 +393,7 @@ text {* minimal compact element *} definition - compact_bot :: "'a compact_basis" where + compact_bot :: "'a::bifinite compact_basis" where "compact_bot = Abs_compact_basis \" lemma Rep_compact_bot: "Rep_compact_basis compact_bot = \" @@ -544,7 +544,7 @@ subsection {* A compact basis for powerdomains *} typedef 'a pd_basis = - "{S::'a::bifinite compact_basis set. finite S \ S \ {}}" + "{S::'a::profinite compact_basis set. finite S \ S \ {}}" by (rule_tac x="{arbitrary}" in exI, simp) lemma finite_Rep_pd_basis [simp]: "finite (Rep_pd_basis u)" diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/ConvexPD.thy --- a/src/HOLCF/ConvexPD.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/ConvexPD.thy Wed Mar 26 22:38:17 2008 +0100 @@ -142,7 +142,7 @@ subsection {* Type definition *} cpodef (open) 'a convex_pd = - "{S::'a::bifinite pd_basis set. convex_le.ideal S}" + "{S::'a::profinite pd_basis set. convex_le.ideal S}" apply (simp add: convex_le.adm_ideal) apply (fast intro: convex_le.ideal_principal) done @@ -206,7 +206,7 @@ subsection {* Approximation *} -instance convex_pd :: (bifinite) approx .. +instance convex_pd :: (profinite) approx .. defs (overloaded) approx_convex_pd_def: @@ -245,7 +245,7 @@ unfolding approx_convex_pd_def by (rule convex_pd.finite_fixes_basis_fun_take) -instance convex_pd :: (bifinite) bifinite +instance convex_pd :: (profinite) profinite apply intro_classes apply (simp add: chain_approx_convex_pd) apply (rule lub_approx_convex_pd) @@ -253,6 +253,8 @@ apply (rule finite_fixes_approx_convex_pd) done +instance convex_pd :: (bifinite) bifinite .. + lemma compact_imp_convex_principal: "compact xs \ \t. xs = convex_principal t" apply (drule bifinite_compact_eq_approx) diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/Cprod.thy --- a/src/HOLCF/Cprod.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/Cprod.thy Wed Mar 26 22:38:17 2008 +0100 @@ -342,13 +342,13 @@ subsection {* Product type is a bifinite domain *} -instance "*" :: (bifinite_cpo, bifinite_cpo) approx .. +instance "*" :: (profinite, profinite) approx .. defs (overloaded) approx_cprod_def: "approx \ \n. \\x, y\. \approx n\x, approx n\y\" -instance "*" :: (bifinite_cpo, bifinite_cpo) bifinite_cpo +instance "*" :: (profinite, profinite) profinite proof fix i :: nat and x :: "'a \ 'b" show "chain (\i. approx i\x)" diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/LowerPD.thy --- a/src/HOLCF/LowerPD.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/LowerPD.thy Wed Mar 26 22:38:17 2008 +0100 @@ -97,7 +97,7 @@ subsection {* Type definition *} cpodef (open) 'a lower_pd = - "{S::'a::bifinite pd_basis set. lower_le.ideal S}" + "{S::'a::profinite pd_basis set. lower_le.ideal S}" apply (simp add: lower_le.adm_ideal) apply (fast intro: lower_le.ideal_principal) done @@ -171,7 +171,7 @@ subsection {* Approximation *} -instance lower_pd :: (bifinite) approx .. +instance lower_pd :: (profinite) approx .. defs (overloaded) approx_lower_pd_def: @@ -210,7 +210,7 @@ unfolding approx_lower_pd_def by (rule lower_pd.finite_fixes_basis_fun_take) -instance lower_pd :: (bifinite) bifinite +instance lower_pd :: (profinite) profinite apply intro_classes apply (simp add: chain_approx_lower_pd) apply (rule lub_approx_lower_pd) @@ -218,6 +218,8 @@ apply (rule finite_fixes_approx_lower_pd) done +instance lower_pd :: (bifinite) bifinite .. + lemma compact_imp_lower_principal: "compact xs \ \t. xs = lower_principal t" apply (drule bifinite_compact_eq_approx) diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/Up.thy --- a/src/HOLCF/Up.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/Up.thy Wed Mar 26 22:38:17 2008 +0100 @@ -311,13 +311,13 @@ subsection {* Lifted cpo is a bifinite domain *} -instance u :: (bifinite_cpo) approx .. +instance u :: (profinite) approx .. defs (overloaded) approx_up_def: "approx \ \n. fup\(\ x. up\(approx n\x))" -instance u :: (bifinite_cpo) bifinite +instance u :: (profinite) bifinite proof fix i :: nat and x :: "'a u" show "chain (\i. approx i\x)" diff -r be5b78d95801 -r 562a1d615336 src/HOLCF/UpperPD.thy --- a/src/HOLCF/UpperPD.thy Wed Mar 26 21:05:58 2008 +0100 +++ b/src/HOLCF/UpperPD.thy Wed Mar 26 22:38:17 2008 +0100 @@ -95,7 +95,7 @@ subsection {* Type definition *} cpodef (open) 'a upper_pd = - "{S::'a::bifinite pd_basis set. upper_le.ideal S}" + "{S::'a::profinite pd_basis set. upper_le.ideal S}" apply (simp add: upper_le.adm_ideal) apply (fast intro: upper_le.ideal_principal) done @@ -153,7 +153,7 @@ subsection {* Approximation *} -instance upper_pd :: (bifinite) approx .. +instance upper_pd :: (profinite) approx .. defs (overloaded) approx_upper_pd_def: @@ -192,7 +192,7 @@ unfolding approx_upper_pd_def by (rule upper_pd.finite_fixes_basis_fun_take) -instance upper_pd :: (bifinite) bifinite +instance upper_pd :: (profinite) profinite apply intro_classes apply (simp add: chain_approx_upper_pd) apply (rule lub_approx_upper_pd) @@ -200,6 +200,8 @@ apply (rule finite_fixes_approx_upper_pd) done +instance upper_pd :: (bifinite) bifinite .. + lemma compact_imp_upper_principal: "compact xs \ \t. xs = upper_principal t" apply (drule bifinite_compact_eq_approx)