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 |