src/HOL/HOLCF/ConvexPD.thy
changeset 41402 b647212cee03
parent 41399 ad093e4638e2
child 41430 1aa23e9f2c87
equal deleted inserted replaced
41401:e3ec82999306 41402:b647212cee03
   199     convex_pd.extension_mono PDPlus_convex_mono)
   199     convex_pd.extension_mono PDPlus_convex_mono)
   200 
   200 
   201 interpretation convex_add: semilattice convex_add proof
   201 interpretation convex_add: semilattice convex_add proof
   202   fix xs ys zs :: "'a convex_pd"
   202   fix xs ys zs :: "'a convex_pd"
   203   show "(xs \<union>\<natural> ys) \<union>\<natural> zs = xs \<union>\<natural> (ys \<union>\<natural> zs)"
   203   show "(xs \<union>\<natural> ys) \<union>\<natural> zs = xs \<union>\<natural> (ys \<union>\<natural> zs)"
   204     apply (induct xs ys arbitrary: zs rule: convex_pd.principal_induct2, simp, simp)
   204     apply (induct xs rule: convex_pd.principal_induct, simp)
   205     apply (rule_tac x=zs in convex_pd.principal_induct, simp)
   205     apply (induct ys rule: convex_pd.principal_induct, simp)
       
   206     apply (induct zs rule: convex_pd.principal_induct, simp)
   206     apply (simp add: PDPlus_assoc)
   207     apply (simp add: PDPlus_assoc)
   207     done
   208     done
   208   show "xs \<union>\<natural> ys = ys \<union>\<natural> xs"
   209   show "xs \<union>\<natural> ys = ys \<union>\<natural> xs"
   209     apply (induct xs ys rule: convex_pd.principal_induct2, simp, simp)
   210     apply (induct xs rule: convex_pd.principal_induct, simp)
       
   211     apply (induct ys rule: convex_pd.principal_induct, simp)
   210     apply (simp add: PDPlus_commute)
   212     apply (simp add: PDPlus_commute)
   211     done
   213     done
   212   show "xs \<union>\<natural> xs = xs"
   214   show "xs \<union>\<natural> xs = xs"
   213     apply (induct xs rule: convex_pd.principal_induct, simp)
   215     apply (induct xs rule: convex_pd.principal_induct, simp)
   214     apply (simp add: PDPlus_absorb)
   216     apply (simp add: PDPlus_absorb)
   362   "convex_bind\<cdot>{x}\<natural>\<cdot>f = f\<cdot>x"
   364   "convex_bind\<cdot>{x}\<natural>\<cdot>f = f\<cdot>x"
   363 by (induct x rule: compact_basis.principal_induct, simp, simp)
   365 by (induct x rule: compact_basis.principal_induct, simp, simp)
   364 
   366 
   365 lemma convex_bind_plus [simp]:
   367 lemma convex_bind_plus [simp]:
   366   "convex_bind\<cdot>(xs \<union>\<natural> ys)\<cdot>f = convex_bind\<cdot>xs\<cdot>f \<union>\<natural> convex_bind\<cdot>ys\<cdot>f"
   368   "convex_bind\<cdot>(xs \<union>\<natural> ys)\<cdot>f = convex_bind\<cdot>xs\<cdot>f \<union>\<natural> convex_bind\<cdot>ys\<cdot>f"
   367 by (induct xs ys rule: convex_pd.principal_induct2, simp, simp, simp)
   369 by (induct xs rule: convex_pd.principal_induct, simp,
       
   370     induct ys rule: convex_pd.principal_induct, simp, simp)
   368 
   371 
   369 lemma convex_bind_strict [simp]: "convex_bind\<cdot>\<bottom>\<cdot>f = f\<cdot>\<bottom>"
   372 lemma convex_bind_strict [simp]: "convex_bind\<cdot>\<bottom>\<cdot>f = f\<cdot>\<bottom>"
   370 unfolding convex_unit_strict [symmetric] by (rule convex_bind_unit)
   373 unfolding convex_unit_strict [symmetric] by (rule convex_bind_unit)
   371 
   374 
   372 lemma convex_bind_bind:
   375 lemma convex_bind_bind:
   535   "convex_to_upper\<cdot>{x}\<natural> = {x}\<sharp>"
   538   "convex_to_upper\<cdot>{x}\<natural> = {x}\<sharp>"
   536 by (induct x rule: compact_basis.principal_induct, simp, simp)
   539 by (induct x rule: compact_basis.principal_induct, simp, simp)
   537 
   540 
   538 lemma convex_to_upper_plus [simp]:
   541 lemma convex_to_upper_plus [simp]:
   539   "convex_to_upper\<cdot>(xs \<union>\<natural> ys) = convex_to_upper\<cdot>xs \<union>\<sharp> convex_to_upper\<cdot>ys"
   542   "convex_to_upper\<cdot>(xs \<union>\<natural> ys) = convex_to_upper\<cdot>xs \<union>\<sharp> convex_to_upper\<cdot>ys"
   540 by (induct xs ys rule: convex_pd.principal_induct2, simp, simp, simp)
   543 by (induct xs rule: convex_pd.principal_induct, simp,
       
   544     induct ys rule: convex_pd.principal_induct, simp, simp)
   541 
   545 
   542 lemma convex_to_upper_bind [simp]:
   546 lemma convex_to_upper_bind [simp]:
   543   "convex_to_upper\<cdot>(convex_bind\<cdot>xs\<cdot>f) =
   547   "convex_to_upper\<cdot>(convex_bind\<cdot>xs\<cdot>f) =
   544     upper_bind\<cdot>(convex_to_upper\<cdot>xs)\<cdot>(convex_to_upper oo f)"
   548     upper_bind\<cdot>(convex_to_upper\<cdot>xs)\<cdot>(convex_to_upper oo f)"
   545 by (induct xs rule: convex_pd_induct, simp, simp, simp)
   549 by (induct xs rule: convex_pd_induct, simp, simp, simp)
   574   "convex_to_lower\<cdot>{x}\<natural> = {x}\<flat>"
   578   "convex_to_lower\<cdot>{x}\<natural> = {x}\<flat>"
   575 by (induct x rule: compact_basis.principal_induct, simp, simp)
   579 by (induct x rule: compact_basis.principal_induct, simp, simp)
   576 
   580 
   577 lemma convex_to_lower_plus [simp]:
   581 lemma convex_to_lower_plus [simp]:
   578   "convex_to_lower\<cdot>(xs \<union>\<natural> ys) = convex_to_lower\<cdot>xs \<union>\<flat> convex_to_lower\<cdot>ys"
   582   "convex_to_lower\<cdot>(xs \<union>\<natural> ys) = convex_to_lower\<cdot>xs \<union>\<flat> convex_to_lower\<cdot>ys"
   579 by (induct xs ys rule: convex_pd.principal_induct2, simp, simp, simp)
   583 by (induct xs rule: convex_pd.principal_induct, simp,
       
   584     induct ys rule: convex_pd.principal_induct, simp, simp)
   580 
   585 
   581 lemma convex_to_lower_bind [simp]:
   586 lemma convex_to_lower_bind [simp]:
   582   "convex_to_lower\<cdot>(convex_bind\<cdot>xs\<cdot>f) =
   587   "convex_to_lower\<cdot>(convex_bind\<cdot>xs\<cdot>f) =
   583     lower_bind\<cdot>(convex_to_lower\<cdot>xs)\<cdot>(convex_to_lower oo f)"
   588     lower_bind\<cdot>(convex_to_lower\<cdot>xs)\<cdot>(convex_to_lower oo f)"
   584 by (induct xs rule: convex_pd_induct, simp, simp, simp)
   589 by (induct xs rule: convex_pd_induct, simp, simp, simp)