(* not added to simpset because of interference with c_hupd_conv *) lemma c_hupd_hp_invariant: "gh (c_hupd hp (None, st)) = hp" by (cases st) (simp add: c_hupd_conv gh_def)
lemma unique_map_fst [rule_format]: "(\ x \ set xs. (fst x = fst (f x) )) \
unique (map f xs) = unique xs" proof (induct xs) case Nil show ?caseby simp next case (Cons a list) show ?case proof assume fst_eq: "\x\set (a # list). fst x = fst (f x)"
have fst_set: "(fst a \ fst ` set list) = (fst (f a) \ fst ` f ` set list)" proof assume as: "fst a \ fst ` set list" thenobtain x where fst_a_x: "x\set list \ fst a = fst x" by (auto simp add: image_iff) thenhave"fst (f a) = fst (f x)"by (simp add: fst_eq) with as show"(fst (f a) \ fst ` f ` set list)" by (simp add: fst_a_x) next assume as: "fst (f a) \ fst ` f ` set list" thenobtain x where fst_a_x: "x\set list \ fst (f a) = fst (f x)" by (auto simp add: image_iff) thenhave"fst a = fst x"by (simp add: fst_eq) with as show"fst a \ fst ` set list" by (simp add: fst_a_x) qed
with fst_eq Cons show"unique (map f (a # list)) = unique (a # list)" by (simp add: unique_def fst_set image_comp) qed qed
lemma comp_classname: "is_class G C \ fst (the (class G C)) = fst (the (class (comp G) C))" by (cases "class G C") (auto simp: is_class_def dest: comp_class_imp)
lemma comp_class_rec: "wf ((subcls1 G)\) \
class_rec (comp G) C t f =
class_rec G C t (\<lambda> C' fs' ms' r'. f C' fs' (map (compMethod G C') ms') r')" apply (rule_tac a = C in wf_induct) apply assumption apply (subgoal_tac "wf ((subcls1 (comp G))\)") apply (subgoal_tac "(class G x = None) \ (\ D fs ms. (class G x = Some (D, fs, ms)))") apply (erule disjE)
(* case class G x = None *) apply (simp (no_asm_simp) add: class_rec_def comp_subcls1
wfrec [where R="(subcls1 G)\", simplified]) apply (simp add: comp_class_None)
(* case \<exists> D fs ms. (class G x = Some (D, fs, ms)) *) apply (erule exE)+ apply (frule comp_class_imp) apply (frule_tac G="comp G"and C=x and t=t and f=f in class_rec_lemma) apply assumption apply (frule_tac G=G and C=x and t=t and f="(\C' fs' ms'. f C' fs' (map (compMethod G C') ms'))" in class_rec_lemma) apply assumption apply (simp only:) apply (case_tac "x = Object") apply simp apply (frule subcls1I, assumption) apply (drule_tac x=D in spec, drule mp, simp) apply simp
(* subgoals *) apply (case_tac "class G x") apply auto apply (simp add: comp_subcls1) done
lemma comp_field: "wf ((subcls1 G)\) \
field (comp G,C) = field (G,C)" by (simp add: TypeRel.field_def comp_fields)
lemma class_rec_relation [rule_format (no_asm)]: "\ ws_prog G; \<forall>fs ms. R (f1 Object fs ms t1) (f2 Object fs ms t2); \<forall>C fs ms r1 r2. (R r1 r2) \<longrightarrow> (R (f1 C fs ms r1) (f2 C fs ms r2)) \<rbrakk> \<Longrightarrow> ((class G C) \<noteq> None) \<longrightarrow> R (class_rec G C t1 f1) (class_rec G C t2 f2)" apply (frule wf_subcls1) (* establish wf ((subcls1 G)\<inverse>) *) apply (rule_tac a = C in wf_induct) apply assumption apply (intro strip) apply (subgoal_tac "(\D rT mb. class G x = Some (D, rT, mb))") apply (erule exE)+ apply (frule_tac C=x and t=t1 and f=f1 in class_rec_lemma) apply assumption apply (frule_tac C=x and t=t2 and f=f2 in class_rec_lemma) apply assumption apply (simp only:)
apply (case_tac "x = Object") apply simp apply (frule subcls1I, assumption) apply (drule_tac x=D in spec, drule mp, simp) apply simp apply (subgoal_tac "(\D' rT' mb'. class G D = Some (D', rT', mb'))") apply blast
(**********************************************************************) (* DIVERSE OTHER LEMMAS *) (**********************************************************************)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.