equal
deleted
inserted
replaced
74 |
74 |
75 typedef (open) 'a upper_pd = |
75 typedef (open) 'a upper_pd = |
76 "{S::'a pd_basis set. upper_le.ideal S}" |
76 "{S::'a pd_basis set. upper_le.ideal S}" |
77 by (fast intro: upper_le.ideal_principal) |
77 by (fast intro: upper_le.ideal_principal) |
78 |
78 |
79 instantiation upper_pd :: (sfp) below |
79 instantiation upper_pd :: (bifinite) below |
80 begin |
80 begin |
81 |
81 |
82 definition |
82 definition |
83 "x \<sqsubseteq> y \<longleftrightarrow> Rep_upper_pd x \<subseteq> Rep_upper_pd y" |
83 "x \<sqsubseteq> y \<longleftrightarrow> Rep_upper_pd x \<subseteq> Rep_upper_pd y" |
84 |
84 |
85 instance .. |
85 instance .. |
86 end |
86 end |
87 |
87 |
88 instance upper_pd :: (sfp) po |
88 instance upper_pd :: (bifinite) po |
89 using type_definition_upper_pd below_upper_pd_def |
89 using type_definition_upper_pd below_upper_pd_def |
90 by (rule upper_le.typedef_ideal_po) |
90 by (rule upper_le.typedef_ideal_po) |
91 |
91 |
92 instance upper_pd :: (sfp) cpo |
92 instance upper_pd :: (bifinite) cpo |
93 using type_definition_upper_pd below_upper_pd_def |
93 using type_definition_upper_pd below_upper_pd_def |
94 by (rule upper_le.typedef_ideal_cpo) |
94 by (rule upper_le.typedef_ideal_cpo) |
95 |
95 |
96 definition |
96 definition |
97 upper_principal :: "'a pd_basis \<Rightarrow> 'a upper_pd" where |
97 upper_principal :: "'a pd_basis \<Rightarrow> 'a upper_pd" where |
106 text {* Upper powerdomain is pointed *} |
106 text {* Upper powerdomain is pointed *} |
107 |
107 |
108 lemma upper_pd_minimal: "upper_principal (PDUnit compact_bot) \<sqsubseteq> ys" |
108 lemma upper_pd_minimal: "upper_principal (PDUnit compact_bot) \<sqsubseteq> ys" |
109 by (induct ys rule: upper_pd.principal_induct, simp, simp) |
109 by (induct ys rule: upper_pd.principal_induct, simp, simp) |
110 |
110 |
111 instance upper_pd :: (sfp) pcpo |
111 instance upper_pd :: (bifinite) pcpo |
112 by intro_classes (fast intro: upper_pd_minimal) |
112 by intro_classes (fast intro: upper_pd_minimal) |
113 |
113 |
114 lemma inst_upper_pd_pcpo: "\<bottom> = upper_principal (PDUnit compact_bot)" |
114 lemma inst_upper_pd_pcpo: "\<bottom> = upper_principal (PDUnit compact_bot)" |
115 by (rule upper_pd_minimal [THEN UU_I, symmetric]) |
115 by (rule upper_pd_minimal [THEN UU_I, symmetric]) |
116 |
116 |
426 done |
426 done |
427 thus "finite {xs. upper_map\<cdot>d\<cdot>xs = xs}" |
427 thus "finite {xs. upper_map\<cdot>d\<cdot>xs = xs}" |
428 by (rule finite_range_imp_finite_fixes) |
428 by (rule finite_range_imp_finite_fixes) |
429 qed |
429 qed |
430 |
430 |
431 subsection {* Upper powerdomain is an SFP domain *} |
431 subsection {* Upper powerdomain is a bifinite domain *} |
432 |
432 |
433 definition |
433 definition |
434 upper_approx :: "nat \<Rightarrow> udom upper_pd \<rightarrow> udom upper_pd" |
434 upper_approx :: "nat \<Rightarrow> udom upper_pd \<rightarrow> udom upper_pd" |
435 where |
435 where |
436 "upper_approx = (\<lambda>i. upper_map\<cdot>(udom_approx i))" |
436 "upper_approx = (\<lambda>i. upper_map\<cdot>(udom_approx i))" |
456 unfolding upper_sfp_def |
456 unfolding upper_sfp_def |
457 apply (rule cast_sfp_fun1 [OF upper_approx]) |
457 apply (rule cast_sfp_fun1 [OF upper_approx]) |
458 apply (erule finite_deflation_upper_map) |
458 apply (erule finite_deflation_upper_map) |
459 done |
459 done |
460 |
460 |
461 instantiation upper_pd :: (sfp) sfp |
461 instantiation upper_pd :: (bifinite) bifinite |
462 begin |
462 begin |
463 |
463 |
464 definition |
464 definition |
465 "emb = udom_emb upper_approx oo upper_map\<cdot>emb" |
465 "emb = udom_emb upper_approx oo upper_map\<cdot>emb" |
466 |
466 |
481 by (simp add: cast_SFP oo_def expand_cfun_eq upper_map_map) |
481 by (simp add: cast_SFP oo_def expand_cfun_eq upper_map_map) |
482 qed |
482 qed |
483 |
483 |
484 end |
484 end |
485 |
485 |
486 text {* SFP of type constructor = type combinator *} |
|
487 |
|
488 lemma SFP_upper: "SFP('a upper_pd) = upper_sfp\<cdot>SFP('a)" |
486 lemma SFP_upper: "SFP('a upper_pd) = upper_sfp\<cdot>SFP('a)" |
489 by (rule sfp_upper_pd_def) |
487 by (rule sfp_upper_pd_def) |
490 |
488 |
491 |
489 |
492 subsection {* Join *} |
490 subsection {* Join *} |