src/HOLCF/UpperPD.thy
changeset 34973 ae634fad947e
parent 33808 31169fdc5ae7
child 35901 12f09bf2c77f
equal deleted inserted replaced
34972:cc1d4c3ca9db 34973:ae634fad947e
   230 
   230 
   231 lemma approx_upper_plus [simp]:
   231 lemma approx_upper_plus [simp]:
   232   "approx n\<cdot>(xs +\<sharp> ys) = (approx n\<cdot>xs) +\<sharp> (approx n\<cdot>ys)"
   232   "approx n\<cdot>(xs +\<sharp> ys) = (approx n\<cdot>xs) +\<sharp> (approx n\<cdot>ys)"
   233 by (induct xs ys rule: upper_pd.principal_induct2, simp, simp, simp)
   233 by (induct xs ys rule: upper_pd.principal_induct2, simp, simp, simp)
   234 
   234 
   235 lemma upper_plus_assoc: "(xs +\<sharp> ys) +\<sharp> zs = xs +\<sharp> (ys +\<sharp> zs)"
   235 interpretation upper_add!: semilattice upper_add proof
   236 apply (induct xs ys arbitrary: zs rule: upper_pd.principal_induct2, simp, simp)
   236   fix xs ys zs :: "'a upper_pd"
   237 apply (rule_tac x=zs in upper_pd.principal_induct, simp)
   237   show "(xs +\<sharp> ys) +\<sharp> zs = xs +\<sharp> (ys +\<sharp> zs)"
   238 apply (simp add: PDPlus_assoc)
   238     apply (induct xs ys arbitrary: zs rule: upper_pd.principal_induct2, simp, simp)
   239 done
   239     apply (rule_tac x=zs in upper_pd.principal_induct, simp)
   240 
   240     apply (simp add: PDPlus_assoc)
   241 lemma upper_plus_commute: "xs +\<sharp> ys = ys +\<sharp> xs"
   241     done
   242 apply (induct xs ys rule: upper_pd.principal_induct2, simp, simp)
   242   show "xs +\<sharp> ys = ys +\<sharp> xs"
   243 apply (simp add: PDPlus_commute)
   243     apply (induct xs ys rule: upper_pd.principal_induct2, simp, simp)
   244 done
   244     apply (simp add: PDPlus_commute)
   245 
   245     done
   246 lemma upper_plus_absorb [simp]: "xs +\<sharp> xs = xs"
   246   show "xs +\<sharp> xs = xs"
   247 apply (induct xs rule: upper_pd.principal_induct, simp)
   247     apply (induct xs rule: upper_pd.principal_induct, simp)
   248 apply (simp add: PDPlus_absorb)
   248     apply (simp add: PDPlus_absorb)
   249 done
   249     done
   250 
   250 qed
   251 lemma upper_plus_left_commute: "xs +\<sharp> (ys +\<sharp> zs) = ys +\<sharp> (xs +\<sharp> zs)"
   251 
   252 by (rule mk_left_commute [of "op +\<sharp>", OF upper_plus_assoc upper_plus_commute])
   252 lemmas upper_plus_assoc = upper_add.assoc
   253 
   253 lemmas upper_plus_commute = upper_add.commute
   254 lemma upper_plus_left_absorb [simp]: "xs +\<sharp> (xs +\<sharp> ys) = xs +\<sharp> ys"
   254 lemmas upper_plus_absorb = upper_add.idem
   255 by (simp only: upper_plus_assoc [symmetric] upper_plus_absorb)
   255 lemmas upper_plus_left_commute = upper_add.left_commute
       
   256 lemmas upper_plus_left_absorb = upper_add.left_idem
   256 
   257 
   257 text {* Useful for @{text "simp add: upper_plus_ac"} *}
   258 text {* Useful for @{text "simp add: upper_plus_ac"} *}
   258 lemmas upper_plus_ac =
   259 lemmas upper_plus_ac =
   259   upper_plus_assoc upper_plus_commute upper_plus_left_commute
   260   upper_plus_assoc upper_plus_commute upper_plus_left_commute
   260 
   261