src/HOLCF/ConvexPD.thy
changeset 30240 5b25fee0362c
parent 29672 07f3da9fd2a0
child 30729 461ee3e49ad3
equal deleted inserted replaced
30239:179ff9cb160b 30240:5b25fee0362c
   289 lemma convex_plus_commute: "xs +\<natural> ys = ys +\<natural> xs"
   289 lemma convex_plus_commute: "xs +\<natural> ys = ys +\<natural> xs"
   290 apply (induct xs ys rule: convex_pd.principal_induct2, simp, simp)
   290 apply (induct xs ys rule: convex_pd.principal_induct2, simp, simp)
   291 apply (simp add: PDPlus_commute)
   291 apply (simp add: PDPlus_commute)
   292 done
   292 done
   293 
   293 
   294 lemma convex_plus_absorb: "xs +\<natural> xs = xs"
   294 lemma convex_plus_absorb [simp]: "xs +\<natural> xs = xs"
   295 apply (induct xs rule: convex_pd.principal_induct, simp)
   295 apply (induct xs rule: convex_pd.principal_induct, simp)
   296 apply (simp add: PDPlus_absorb)
   296 apply (simp add: PDPlus_absorb)
   297 done
   297 done
   298 
   298 
   299 interpretation aci_convex_plus!: ab_semigroup_idem_mult "op +\<natural>"
       
   300   proof qed (rule convex_plus_assoc convex_plus_commute convex_plus_absorb)+
       
   301 
       
   302 lemma convex_plus_left_commute: "xs +\<natural> (ys +\<natural> zs) = ys +\<natural> (xs +\<natural> zs)"
   299 lemma convex_plus_left_commute: "xs +\<natural> (ys +\<natural> zs) = ys +\<natural> (xs +\<natural> zs)"
   303 by (rule aci_convex_plus.mult_left_commute)
   300 by (rule mk_left_commute
   304 
   301     [of "op +\<natural>", OF convex_plus_assoc convex_plus_commute])
   305 lemma convex_plus_left_absorb: "xs +\<natural> (xs +\<natural> ys) = xs +\<natural> ys"
   302 
   306 by (rule aci_convex_plus.mult_left_idem)
   303 lemma convex_plus_left_absorb [simp]: "xs +\<natural> (xs +\<natural> ys) = xs +\<natural> ys"
   307 (*
   304 by (simp only: convex_plus_assoc [symmetric] convex_plus_absorb)
   308 lemmas convex_plus_aci = aci_convex_plus.mult_ac_idem
   305 
   309 *)
   306 text {* Useful for @{text "simp add: convex_plus_ac"} *}
       
   307 lemmas convex_plus_ac =
       
   308   convex_plus_assoc convex_plus_commute convex_plus_left_commute
       
   309 
       
   310 text {* Useful for @{text "simp only: convex_plus_aci"} *}
       
   311 lemmas convex_plus_aci =
       
   312   convex_plus_ac convex_plus_absorb convex_plus_left_absorb
       
   313 
   310 lemma convex_unit_less_plus_iff [simp]:
   314 lemma convex_unit_less_plus_iff [simp]:
   311   "{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"
   312  apply (rule iffI)
   316  apply (rule iffI)
   313   apply (subgoal_tac
   317   apply (subgoal_tac
   314     "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)")
   411 lemma ACI_convex_bind:
   415 lemma ACI_convex_bind:
   412   "ab_semigroup_idem_mult (\<lambda>x y. \<Lambda> f. x\<cdot>f +\<natural> y\<cdot>f)"
   416   "ab_semigroup_idem_mult (\<lambda>x y. \<Lambda> f. x\<cdot>f +\<natural> y\<cdot>f)"
   413 apply unfold_locales
   417 apply unfold_locales
   414 apply (simp add: convex_plus_assoc)
   418 apply (simp add: convex_plus_assoc)
   415 apply (simp add: convex_plus_commute)
   419 apply (simp add: convex_plus_commute)
   416 apply (simp add: convex_plus_absorb eta_cfun)
   420 apply (simp add: eta_cfun)
   417 done
   421 done
   418 
   422 
   419 lemma convex_bind_basis_simps [simp]:
   423 lemma convex_bind_basis_simps [simp]:
   420   "convex_bind_basis (PDUnit a) =
   424   "convex_bind_basis (PDUnit a) =
   421     (\<Lambda> f. f\<cdot>(Rep_compact_basis a))"
   425     (\<Lambda> f. f\<cdot>(Rep_compact_basis a))"