src/HOL/MicroJava/Comp/LemmasComp.thy
changeset 33836 da3e88ea6c72
parent 33640 0d82107dc07a
child 33954 1bc3b688548c
equal deleted inserted replaced
33835:d6134fb5a49f 33836:da3e88ea6c72
    66       with as show "fst a \<in> fst ` set list" by (simp add: fst_a_x)
    66       with as show "fst a \<in> fst ` set list" by (simp add: fst_a_x)
    67     qed
    67     qed
    68 
    68 
    69     with fst_eq Cons 
    69     with fst_eq Cons 
    70     show "unique (map f (a # list)) = unique (a # list)"
    70     show "unique (map f (a # list)) = unique (a # list)"
    71       by (simp add: unique_def fst_set)
    71       by (simp add: unique_def fst_set image_compose)
    72   qed
    72   qed
    73 qed
    73 qed
    74 
    74 
    75 lemma comp_unique: "unique (comp G) = unique G"
    75 lemma comp_unique: "unique (comp G) = unique G"
    76 apply (simp add: comp_def)
    76 apply (simp add: comp_def)
   290   Option.map (\<lambda> (D,rT,b).  (D, rT, mtd_mb (compMethod G D (S, rT, b))))
   290   Option.map (\<lambda> (D,rT,b).  (D, rT, mtd_mb (compMethod G D (S, rT, b))))
   291              (method (G, C) S))"
   291              (method (G, C) S))"
   292 apply (simp add: method_def)
   292 apply (simp add: method_def)
   293 apply (frule wf_subcls1)
   293 apply (frule wf_subcls1)
   294 apply (simp add: comp_class_rec)
   294 apply (simp add: comp_class_rec)
   295 apply (simp add: map_compose [THEN sym] split_iter split_compose del: map_compose)
   295 apply (simp add: split_iter split_compose map_map[symmetric] del: map_map)
   296 apply (rule_tac R="%x y. ((x S) = (Option.map (\<lambda>(D, rT, b). 
   296 apply (rule_tac R="%x y. ((x S) = (Option.map (\<lambda>(D, rT, b). 
   297   (D, rT, snd (snd (compMethod G D (S, rT, b))))) (y S)))" 
   297   (D, rT, snd (snd (compMethod G D (S, rT, b))))) (y S)))" 
   298   in class_rec_relation)
   298   in class_rec_relation)
   299 apply assumption
   299 apply assumption
   300 
   300 
   309 defer                           (* inj \<dots> *)
   309 defer                           (* inj \<dots> *)
   310 apply (simp add: inj_on_def split_beta) 
   310 apply (simp add: inj_on_def split_beta) 
   311 apply (simp add: split_beta compMethod_def)
   311 apply (simp add: split_beta compMethod_def)
   312 apply (simp add: map_of_map [THEN sym])
   312 apply (simp add: map_of_map [THEN sym])
   313 apply (simp add: split_beta)
   313 apply (simp add: split_beta)
   314 apply (simp add: map_compose [THEN sym] Fun.comp_def split_beta)
   314 apply (simp add: Fun.comp_def split_beta)
   315 apply (subgoal_tac "(\<lambda>x\<Colon>(vname list \<times> fdecl list \<times> stmt \<times> expr) mdecl.
   315 apply (subgoal_tac "(\<lambda>x\<Colon>(vname list \<times> fdecl list \<times> stmt \<times> expr) mdecl.
   316                     (fst x, Object,
   316                     (fst x, Object,
   317                      snd (compMethod G Object
   317                      snd (compMethod G Object
   318                            (inv (\<lambda>(s\<Colon>sig, m\<Colon>ty \<times> vname list \<times> fdecl list \<times> stmt \<times> expr).
   318                            (inv (\<lambda>(s\<Colon>sig, m\<Colon>ty \<times> vname list \<times> fdecl list \<times> stmt \<times> expr).
   319                                     (s, Object, m))
   319                                     (s, Object, m))