src/HOL/IMP/Abs_Int0.thy
changeset 46246 e69684c1c142
parent 46158 8b5f1f91ef38
child 46334 3858dc8eabd8
equal deleted inserted replaced
46244:549755ebf4d2 46246:e69684c1c142
   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>