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 |