339 lemma size_annos_same: "strip c1 = strip c2 \<Longrightarrow> size(annos c1) = size(annos c2)" |
339 lemma size_annos_same: "strip c1 = strip c2 \<Longrightarrow> size(annos c1) = size(annos c2)" |
340 apply(induct c2 arbitrary: c1) |
340 apply(induct c2 arbitrary: c1) |
341 apply (auto simp: strip_eq_SKIP strip_eq_Assign strip_eq_Semi strip_eq_If strip_eq_While) |
341 apply (auto simp: strip_eq_SKIP strip_eq_Assign strip_eq_Semi strip_eq_If strip_eq_While) |
342 done |
342 done |
343 |
343 |
|
344 lemmas size_annos_same2 = eqTrueI[OF size_annos_same] |
|
345 |
|
346 lemma set_annos_anno: "set (annos (anno a c)) = {a}" |
|
347 by(induction c)(auto) |
|
348 |
344 lemma le_iff_le_annos: "c1 \<sqsubseteq> c2 \<longleftrightarrow> |
349 lemma le_iff_le_annos: "c1 \<sqsubseteq> c2 \<longleftrightarrow> |
345 (annos c1, annos c2) : listrel{(x,y). x \<sqsubseteq> y} \<and> strip c1 = strip c2" |
350 (annos c1, annos c2) : listrel{(x,y). x \<sqsubseteq> y} \<and> strip c1 = strip c2" |
346 apply(induct c1 c2 rule: le_acom.induct) |
351 apply(induct c1 c2 rule: le_acom.induct) |
347 apply (auto simp: listrel.Nil listrel_Cons_iff listrel_app size_annos_same) |
352 apply (auto simp: listrel.Nil listrel_Cons_iff listrel_app size_annos_same2) |
348 apply (metis listrel_app_same_size size_annos_same)+ |
353 apply (metis listrel_app_same_size size_annos_same)+ |
349 done |
354 done |
350 |
355 |
351 lemma le_acom_subset_same_annos: |
356 lemma le_acom_subset_same_annos: |
352 "(strict{(c,c'::'a::preord acom). c \<sqsubseteq> c'})^-1 \<subseteq> |
357 "(strict{(c,c'::'a::preord acom). c \<sqsubseteq> c'})^-1 \<subseteq> |