src/HOLCF/ConvexPD.thy
changeset 31076 99fe356cbbc2
parent 30729 461ee3e49ad3
child 33585 8d39394fe5cf
equal deleted inserted replaced
31075:a9d6cf6de9a8 31076:99fe356cbbc2
   142 
   142 
   143 typedef (open) 'a convex_pd =
   143 typedef (open) 'a convex_pd =
   144   "{S::'a pd_basis set. convex_le.ideal S}"
   144   "{S::'a pd_basis set. convex_le.ideal S}"
   145 by (fast intro: convex_le.ideal_principal)
   145 by (fast intro: convex_le.ideal_principal)
   146 
   146 
   147 instantiation convex_pd :: (profinite) sq_ord
   147 instantiation convex_pd :: (profinite) below
   148 begin
   148 begin
   149 
   149 
   150 definition
   150 definition
   151   "x \<sqsubseteq> y \<longleftrightarrow> Rep_convex_pd x \<subseteq> Rep_convex_pd y"
   151   "x \<sqsubseteq> y \<longleftrightarrow> Rep_convex_pd x \<subseteq> Rep_convex_pd y"
   152 
   152 
   153 instance ..
   153 instance ..
   154 end
   154 end
   155 
   155 
   156 instance convex_pd :: (profinite) po
   156 instance convex_pd :: (profinite) po
   157 by (rule convex_le.typedef_ideal_po
   157 by (rule convex_le.typedef_ideal_po
   158     [OF type_definition_convex_pd sq_le_convex_pd_def])
   158     [OF type_definition_convex_pd below_convex_pd_def])
   159 
   159 
   160 instance convex_pd :: (profinite) cpo
   160 instance convex_pd :: (profinite) cpo
   161 by (rule convex_le.typedef_ideal_cpo
   161 by (rule convex_le.typedef_ideal_cpo
   162     [OF type_definition_convex_pd sq_le_convex_pd_def])
   162     [OF type_definition_convex_pd below_convex_pd_def])
   163 
   163 
   164 lemma Rep_convex_pd_lub:
   164 lemma Rep_convex_pd_lub:
   165   "chain Y \<Longrightarrow> Rep_convex_pd (\<Squnion>i. Y i) = (\<Union>i. Rep_convex_pd (Y i))"
   165   "chain Y \<Longrightarrow> Rep_convex_pd (\<Squnion>i. Y i) = (\<Union>i. Rep_convex_pd (Y i))"
   166 by (rule convex_le.typedef_ideal_rep_contlub
   166 by (rule convex_le.typedef_ideal_rep_contlub
   167     [OF type_definition_convex_pd sq_le_convex_pd_def])
   167     [OF type_definition_convex_pd below_convex_pd_def])
   168 
   168 
   169 lemma ideal_Rep_convex_pd: "convex_le.ideal (Rep_convex_pd xs)"
   169 lemma ideal_Rep_convex_pd: "convex_le.ideal (Rep_convex_pd xs)"
   170 by (rule Rep_convex_pd [unfolded mem_Collect_eq])
   170 by (rule Rep_convex_pd [unfolded mem_Collect_eq])
   171 
   171 
   172 definition
   172 definition
   188 apply (rule finite_range_pd_take)
   188 apply (rule finite_range_pd_take)
   189 apply (rule pd_take_covers)
   189 apply (rule pd_take_covers)
   190 apply (rule ideal_Rep_convex_pd)
   190 apply (rule ideal_Rep_convex_pd)
   191 apply (erule Rep_convex_pd_lub)
   191 apply (erule Rep_convex_pd_lub)
   192 apply (rule Rep_convex_principal)
   192 apply (rule Rep_convex_principal)
   193 apply (simp only: sq_le_convex_pd_def)
   193 apply (simp only: below_convex_pd_def)
   194 done
   194 done
   195 
   195 
   196 text {* Convex powerdomain is pointed *}
   196 text {* Convex powerdomain is pointed *}
   197 
   197 
   198 lemma convex_pd_minimal: "convex_principal (PDUnit compact_bot) \<sqsubseteq> ys"
   198 lemma convex_pd_minimal: "convex_principal (PDUnit compact_bot) \<sqsubseteq> ys"
   309 
   309 
   310 text {* Useful for @{text "simp only: convex_plus_aci"} *}
   310 text {* Useful for @{text "simp only: convex_plus_aci"} *}
   311 lemmas convex_plus_aci =
   311 lemmas convex_plus_aci =
   312   convex_plus_ac convex_plus_absorb convex_plus_left_absorb
   312   convex_plus_ac convex_plus_absorb convex_plus_left_absorb
   313 
   313 
   314 lemma convex_unit_less_plus_iff [simp]:
   314 lemma convex_unit_below_plus_iff [simp]:
   315   "{x}\<natural> \<sqsubseteq> ys +\<natural> zs \<longleftrightarrow> {x}\<natural> \<sqsubseteq> ys \<and> {x}\<natural> \<sqsubseteq> zs"
   315   "{x}\<natural> \<sqsubseteq> ys +\<natural> zs \<longleftrightarrow> {x}\<natural> \<sqsubseteq> ys \<and> {x}\<natural> \<sqsubseteq> zs"
   316  apply (rule iffI)
   316  apply (rule iffI)
   317   apply (subgoal_tac
   317   apply (subgoal_tac
   318     "adm (\<lambda>f. f\<cdot>{x}\<natural> \<sqsubseteq> f\<cdot>ys \<and> f\<cdot>{x}\<natural> \<sqsubseteq> f\<cdot>zs)")
   318     "adm (\<lambda>f. f\<cdot>{x}\<natural> \<sqsubseteq> f\<cdot>ys \<and> f\<cdot>{x}\<natural> \<sqsubseteq> f\<cdot>zs)")
   319    apply (drule admD, rule chain_approx)
   319    apply (drule admD, rule chain_approx)
   327  apply (erule conjE)
   327  apply (erule conjE)
   328  apply (subst convex_plus_absorb [of "{x}\<natural>", symmetric])
   328  apply (subst convex_plus_absorb [of "{x}\<natural>", symmetric])
   329  apply (erule (1) monofun_cfun [OF monofun_cfun_arg])
   329  apply (erule (1) monofun_cfun [OF monofun_cfun_arg])
   330 done
   330 done
   331 
   331 
   332 lemma convex_plus_less_unit_iff [simp]:
   332 lemma convex_plus_below_unit_iff [simp]:
   333   "xs +\<natural> ys \<sqsubseteq> {z}\<natural> \<longleftrightarrow> xs \<sqsubseteq> {z}\<natural> \<and> ys \<sqsubseteq> {z}\<natural>"
   333   "xs +\<natural> ys \<sqsubseteq> {z}\<natural> \<longleftrightarrow> xs \<sqsubseteq> {z}\<natural> \<and> ys \<sqsubseteq> {z}\<natural>"
   334  apply (rule iffI)
   334  apply (rule iffI)
   335   apply (subgoal_tac
   335   apply (subgoal_tac
   336     "adm (\<lambda>f. f\<cdot>xs \<sqsubseteq> f\<cdot>{z}\<natural> \<and> f\<cdot>ys \<sqsubseteq> f\<cdot>{z}\<natural>)")
   336     "adm (\<lambda>f. f\<cdot>xs \<sqsubseteq> f\<cdot>{z}\<natural> \<and> f\<cdot>ys \<sqsubseteq> f\<cdot>{z}\<natural>)")
   337    apply (drule admD, rule chain_approx)
   337    apply (drule admD, rule chain_approx)
   345  apply (erule conjE)
   345  apply (erule conjE)
   346  apply (subst convex_plus_absorb [of "{z}\<natural>", symmetric])
   346  apply (subst convex_plus_absorb [of "{z}\<natural>", symmetric])
   347  apply (erule (1) monofun_cfun [OF monofun_cfun_arg])
   347  apply (erule (1) monofun_cfun [OF monofun_cfun_arg])
   348 done
   348 done
   349 
   349 
   350 lemma convex_unit_less_iff [simp]: "{x}\<natural> \<sqsubseteq> {y}\<natural> \<longleftrightarrow> x \<sqsubseteq> y"
   350 lemma convex_unit_below_iff [simp]: "{x}\<natural> \<sqsubseteq> {y}\<natural> \<longleftrightarrow> x \<sqsubseteq> y"
   351  apply (rule iffI)
   351  apply (rule iffI)
   352   apply (rule profinite_less_ext)
   352   apply (rule profinite_below_ext)
   353   apply (drule_tac f="approx i" in monofun_cfun_arg, simp)
   353   apply (drule_tac f="approx i" in monofun_cfun_arg, simp)
   354   apply (cut_tac x="approx i\<cdot>x" in compact_basis.compact_imp_principal, simp)
   354   apply (cut_tac x="approx i\<cdot>x" in compact_basis.compact_imp_principal, simp)
   355   apply (cut_tac x="approx i\<cdot>y" in compact_basis.compact_imp_principal, simp)
   355   apply (cut_tac x="approx i\<cdot>y" in compact_basis.compact_imp_principal, simp)
   356   apply clarsimp
   356   apply clarsimp
   357  apply (erule monofun_cfun_arg)
   357  apply (erule monofun_cfun_arg)
   431 apply (rule fold_pd_PDPlus [OF ACI_convex_bind])
   431 apply (rule fold_pd_PDPlus [OF ACI_convex_bind])
   432 done
   432 done
   433 
   433 
   434 lemma monofun_LAM:
   434 lemma monofun_LAM:
   435   "\<lbrakk>cont f; cont g; \<And>x. f x \<sqsubseteq> g x\<rbrakk> \<Longrightarrow> (\<Lambda> x. f x) \<sqsubseteq> (\<Lambda> x. g x)"
   435   "\<lbrakk>cont f; cont g; \<And>x. f x \<sqsubseteq> g x\<rbrakk> \<Longrightarrow> (\<Lambda> x. f x) \<sqsubseteq> (\<Lambda> x. g x)"
   436 by (simp add: expand_cfun_less)
   436 by (simp add: expand_cfun_below)
   437 
   437 
   438 lemma convex_bind_basis_mono:
   438 lemma convex_bind_basis_mono:
   439   "t \<le>\<natural> u \<Longrightarrow> convex_bind_basis t \<sqsubseteq> convex_bind_basis u"
   439   "t \<le>\<natural> u \<Longrightarrow> convex_bind_basis t \<sqsubseteq> convex_bind_basis u"
   440 apply (erule convex_le_induct)
   440 apply (erule convex_le_induct)
   441 apply (erule (1) trans_less)
   441 apply (erule (1) below_trans)
   442 apply (simp add: monofun_LAM monofun_cfun)
   442 apply (simp add: monofun_LAM monofun_cfun)
   443 apply (simp add: monofun_LAM monofun_cfun)
   443 apply (simp add: monofun_LAM monofun_cfun)
   444 done
   444 done
   445 
   445 
   446 definition
   446 definition
   604     lower_bind\<cdot>(convex_to_lower\<cdot>xss)\<cdot>convex_to_lower"
   604     lower_bind\<cdot>(convex_to_lower\<cdot>xss)\<cdot>convex_to_lower"
   605 by (simp add: convex_join_def lower_join_def cfcomp_LAM eta_cfun)
   605 by (simp add: convex_join_def lower_join_def cfcomp_LAM eta_cfun)
   606 
   606 
   607 text {* Ordering property *}
   607 text {* Ordering property *}
   608 
   608 
   609 lemma convex_pd_less_iff:
   609 lemma convex_pd_below_iff:
   610   "(xs \<sqsubseteq> ys) =
   610   "(xs \<sqsubseteq> ys) =
   611     (convex_to_upper\<cdot>xs \<sqsubseteq> convex_to_upper\<cdot>ys \<and>
   611     (convex_to_upper\<cdot>xs \<sqsubseteq> convex_to_upper\<cdot>ys \<and>
   612      convex_to_lower\<cdot>xs \<sqsubseteq> convex_to_lower\<cdot>ys)"
   612      convex_to_lower\<cdot>xs \<sqsubseteq> convex_to_lower\<cdot>ys)"
   613  apply (safe elim!: monofun_cfun_arg)
   613  apply (safe elim!: monofun_cfun_arg)
   614  apply (rule profinite_less_ext)
   614  apply (rule profinite_below_ext)
   615  apply (drule_tac f="approx i" in monofun_cfun_arg)
   615  apply (drule_tac f="approx i" in monofun_cfun_arg)
   616  apply (drule_tac f="approx i" in monofun_cfun_arg)
   616  apply (drule_tac f="approx i" in monofun_cfun_arg)
   617  apply (cut_tac x="approx i\<cdot>xs" in convex_pd.compact_imp_principal, simp)
   617  apply (cut_tac x="approx i\<cdot>xs" in convex_pd.compact_imp_principal, simp)
   618  apply (cut_tac x="approx i\<cdot>ys" in convex_pd.compact_imp_principal, simp)
   618  apply (cut_tac x="approx i\<cdot>ys" in convex_pd.compact_imp_principal, simp)
   619  apply clarify
   619  apply clarify
   620  apply (simp add: approx_convex_to_upper approx_convex_to_lower convex_le_def)
   620  apply (simp add: approx_convex_to_upper approx_convex_to_lower convex_le_def)
   621 done
   621 done
   622 
   622 
   623 lemmas convex_plus_less_plus_iff =
   623 lemmas convex_plus_below_plus_iff =
   624   convex_pd_less_iff [where xs="xs +\<natural> ys" and ys="zs +\<natural> ws", standard]
   624   convex_pd_below_iff [where xs="xs +\<natural> ys" and ys="zs +\<natural> ws", standard]
   625 
   625 
   626 lemmas convex_pd_less_simps =
   626 lemmas convex_pd_below_simps =
   627   convex_unit_less_plus_iff
   627   convex_unit_below_plus_iff
   628   convex_plus_less_unit_iff
   628   convex_plus_below_unit_iff
   629   convex_plus_less_plus_iff
   629   convex_plus_below_plus_iff
   630   convex_unit_less_iff
   630   convex_unit_below_iff
   631   convex_to_upper_unit
   631   convex_to_upper_unit
   632   convex_to_upper_plus
   632   convex_to_upper_plus
   633   convex_to_lower_unit
   633   convex_to_lower_unit
   634   convex_to_lower_plus
   634   convex_to_lower_plus
   635   upper_pd_less_simps
   635   upper_pd_below_simps
   636   lower_pd_less_simps
   636   lower_pd_below_simps
   637 
   637 
   638 end
   638 end