diff -r 3ff9d646a66a -r b06a09abf79e src/HOLCF/SetPcpo.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOLCF/SetPcpo.thy Thu Jan 10 20:53:06 2008 +0100 @@ -0,0 +1,84 @@ +(* Title: HOLCF/SetPcpo.thy + ID: $Id$ + Author: Brian Huffman +*) + +header {* Set as a pointed cpo *} + +theory SetPcpo +imports Adm +begin + +instantiation set :: (type) sq_ord +begin + +definition + less_set_def: "(op \) = (op \)" + +instance .. +end + +instance set :: (type) po +by (intro_classes, auto simp add: less_set_def) + +instance set :: (finite) finite_po .. + +lemma Union_is_lub: "A <<| Union A" +unfolding is_lub_def is_ub_def less_set_def by fast + +instance set :: (type) dcpo +by (intro_classes, rule exI, rule Union_is_lub) + +lemma lub_eq_Union: "lub = Union" +by (rule ext, rule thelubI [OF Union_is_lub]) + +instance set :: (type) pcpo +proof + have "\y::'a set. {} \ y" unfolding less_set_def by simp + thus "\x::'a set. \y. x \ y" .. +qed + +lemma UU_eq_empty: "\ = {}" +by (rule UU_I [symmetric], simp add: less_set_def) + +lemmas set_cpo_simps = less_set_def lub_eq_Union UU_eq_empty + +subsection {* Admissibility of set predicates *} + +lemma adm_nonempty: "adm (\A. \x. x \ A)" +by (rule admI, force simp add: lub_eq_Union) + +lemma adm_in: "adm (\A. x \ A)" +by (rule admI, simp add: lub_eq_Union) + +lemma adm_not_in: "adm (\A. x \ A)" +by (rule admI, simp add: lub_eq_Union) + +lemma adm_Ball: "(\x. adm (\A. P A x)) \ adm (\A. \x\A. P A x)" +unfolding Ball_def by (simp add: adm_not_in) + +lemma adm_Bex: "adm (\A. Bex A P)" +by (rule admI, simp add: lub_eq_Union) + +lemma adm_subset: "adm (\A. A \ B)" +by (rule admI, auto simp add: lub_eq_Union) + +lemma adm_superset: "adm (\A. B \ A)" +by (rule admI, auto simp add: lub_eq_Union) + +lemmas adm_set_lemmas = + adm_nonempty adm_in adm_not_in adm_Bex adm_Ball adm_subset adm_superset + +subsection {* Compactness *} + +lemma compact_empty: "compact {}" +by (fold UU_eq_empty, simp) + +lemma compact_insert: "compact A \ compact (insert x A)" +unfolding compact_def set_cpo_simps +by (simp add: adm_set_lemmas) + +lemma finite_imp_compact: "finite A \ compact A" +by (induct A set: finite, rule compact_empty, erule compact_insert) + +end