src/HOL/Bali/TypeSafe.thy
changeset 62390 842917225d56
parent 62042 6c6ccf573479
child 63648 f9f3006a5579
equal deleted inserted replaced
62380:29800666e526 62390:842917225d56
    58  "error_free (check_field_access G accC statDeclC fn stat a s)
    58  "error_free (check_field_access G accC statDeclC fn stat a s)
    59  \<Longrightarrow> (check_field_access G accC statDeclC fn stat a s) = s"
    59  \<Longrightarrow> (check_field_access G accC statDeclC fn stat a s) = s"
    60 apply (cases s)
    60 apply (cases s)
    61 apply (auto simp add: check_field_access_def Let_def error_free_def 
    61 apply (auto simp add: check_field_access_def Let_def error_free_def 
    62                       abrupt_if_def 
    62                       abrupt_if_def 
    63             split: split_if_asm)
    63             split: if_split_asm)
    64 done
    64 done
    65 
    65 
    66 lemma error_free_check_method_access_eq:
    66 lemma error_free_check_method_access_eq:
    67 "error_free (check_method_access G accC statT mode sig a' s)
    67 "error_free (check_method_access G accC statT mode sig a' s)
    68  \<Longrightarrow> (check_method_access G accC statT mode sig a' s) = s"
    68  \<Longrightarrow> (check_method_access G accC statT mode sig a' s) = s"
   211 prefer 26 
   211 prefer 26 
   212   apply (case_tac "inited C (globs s0)", clarsimp, erule thin_rl) (* Init *)
   212   apply (case_tac "inited C (globs s0)", clarsimp, erule thin_rl) (* Init *)
   213 apply (auto del: conjI  dest!: not_initedD gext_new sxalloc_gext halloc_gext
   213 apply (auto del: conjI  dest!: not_initedD gext_new sxalloc_gext halloc_gext
   214  simp  add: lvar_def fvar_def2 avar_def2 init_lvars_def2 
   214  simp  add: lvar_def fvar_def2 avar_def2 init_lvars_def2 
   215             check_field_access_def check_method_access_def Let_def
   215             check_field_access_def check_method_access_def Let_def
   216  split del: split_if_asm split add: sum3.split)
   216  split del: if_split_asm split add: sum3.split)
   217 (* 6 subgoals *)
   217 (* 6 subgoals *)
   218 apply force+
   218 apply force+
   219 done
   219 done
   220 
   220 
   221 lemma evar_gext_f: 
   221 lemma evar_gext_f: 
   230 apply (drule eval_gext)
   230 apply (drule eval_gext)
   231 apply auto
   231 apply auto
   232 done
   232 done
   233 
   233 
   234 lemma init_yields_initd: "G\<turnstile>Norm s1 \<midarrow>Init C\<rightarrow> s2 \<Longrightarrow> initd C s2"
   234 lemma init_yields_initd: "G\<turnstile>Norm s1 \<midarrow>Init C\<rightarrow> s2 \<Longrightarrow> initd C s2"
   235 apply (erule eval_cases , auto split del: split_if_asm)
   235 apply (erule eval_cases , auto split del: if_split_asm)
   236 apply (case_tac "inited C (globs s1)")
   236 apply (case_tac "inited C (globs s1)")
   237 apply  (clarsimp split del: split_if_asm)+
   237 apply  (clarsimp split del: if_split_asm)+
   238 apply (drule eval_gext')+
   238 apply (drule eval_gext')+
   239 apply (drule init_class_obj_inited)
   239 apply (drule init_class_obj_inited)
   240 apply (erule inited_gext)
   240 apply (erule inited_gext)
   241 apply (simp (no_asm_use))
   241 apply (simp (no_asm_use))
   242 done
   242 done
   722   show ?thesis
   722   show ?thesis
   723     by (cases a) auto
   723     by (cases a) auto
   724 qed
   724 qed
   725 
   725 
   726 declare split_paired_All [simp del] split_paired_Ex [simp del] 
   726 declare split_paired_All [simp del] split_paired_Ex [simp del] 
   727 declare split_if     [split del] split_if_asm     [split del] 
   727 declare if_split     [split del] if_split_asm     [split del] 
   728         option.split [split del] option.split_asm [split del]
   728         option.split [split del] option.split_asm [split del]
   729 setup \<open>map_theory_simpset (fn ctxt => ctxt delloop "split_all_tac")\<close>
   729 setup \<open>map_theory_simpset (fn ctxt => ctxt delloop "split_all_tac")\<close>
   730 setup \<open>map_theory_claset (fn ctxt => ctxt delSWrapper "split_all_tac")\<close>
   730 setup \<open>map_theory_claset (fn ctxt => ctxt delSWrapper "split_all_tac")\<close>
   731 
   731 
   732 lemma FVar_lemma: 
   732 lemma FVar_lemma: 
   751 apply   (force elim!: conforms_upd_gobj)
   751 apply   (force elim!: conforms_upd_gobj)
   752 
   752 
   753 apply   (blast intro: FVar_lemma2)
   753 apply   (blast intro: FVar_lemma2)
   754 done
   754 done
   755 declare split_paired_All [simp] split_paired_Ex [simp] 
   755 declare split_paired_All [simp] split_paired_Ex [simp] 
   756 declare split_if     [split] split_if_asm     [split] 
   756 declare if_split     [split] if_split_asm     [split] 
   757         option.split [split] option.split_asm [split]
   757         option.split [split] option.split_asm [split]
   758 setup \<open>map_theory_claset (fn ctxt => ctxt addSbefore ("split_all_tac", split_all_tac))\<close>
   758 setup \<open>map_theory_claset (fn ctxt => ctxt addSbefore ("split_all_tac", split_all_tac))\<close>
   759 setup \<open>map_theory_simpset (fn ctxt => ctxt addloop ("split_all_tac", split_all_tac))\<close>
   759 setup \<open>map_theory_simpset (fn ctxt => ctxt addloop ("split_all_tac", split_all_tac))\<close>
   760 
   760 
   761 
   761 
   867 
   867 
   868 lemma np_no_jump: "x\<noteq>Some (Jump j) \<Longrightarrow> (np a') x \<noteq> Some (Jump j)"
   868 lemma np_no_jump: "x\<noteq>Some (Jump j) \<Longrightarrow> (np a') x \<noteq> Some (Jump j)"
   869 by (auto simp add: abrupt_if_def)
   869 by (auto simp add: abrupt_if_def)
   870 
   870 
   871 declare split_paired_All [simp del] split_paired_Ex [simp del] 
   871 declare split_paired_All [simp del] split_paired_Ex [simp del] 
   872 declare split_if     [split del] split_if_asm     [split del] 
   872 declare if_split     [split del] if_split_asm     [split del] 
   873         option.split [split del] option.split_asm [split del]
   873         option.split [split del] option.split_asm [split del]
   874 setup \<open>map_theory_simpset (fn ctxt => ctxt delloop "split_all_tac")\<close>
   874 setup \<open>map_theory_simpset (fn ctxt => ctxt delloop "split_all_tac")\<close>
   875 setup \<open>map_theory_claset (fn ctxt => ctxt delSWrapper "split_all_tac")\<close>
   875 setup \<open>map_theory_claset (fn ctxt => ctxt delSWrapper "split_all_tac")\<close>
   876 
   876 
   877 lemma conforms_init_lvars: 
   877 lemma conforms_init_lvars: 
   900                                | Res \<Rightarrow> Some (resTy (mthd dm)))
   900                                | Res \<Rightarrow> Some (resTy (mthd dm)))
   901                  | This \<Rightarrow> if (is_static (mthd sm)) 
   901                  | This \<Rightarrow> if (is_static (mthd sm)) 
   902                               then None else Some (Class declC)))"
   902                               then None else Some (Class declC)))"
   903 apply (simp add: init_lvars_def2)
   903 apply (simp add: init_lvars_def2)
   904 apply (rule conforms_set_locals)
   904 apply (rule conforms_set_locals)
   905 apply  (simp (no_asm_simp) split add: split_if)
   905 apply  (simp (no_asm_simp) split add: if_split)
   906 apply (drule  (4) DynT_conf)
   906 apply (drule  (4) DynT_conf)
   907 apply clarsimp
   907 apply clarsimp
   908 (* apply intro *)
   908 (* apply intro *)
   909 apply (drule (3) conforms_init_lvars_lemma 
   909 apply (drule (3) conforms_init_lvars_lemma 
   910                  [where ?lvars="(lcls (mbody (mthd dm)))"])
   910                  [where ?lvars="(lcls (mbody (mthd dm)))"])
   920 apply   (case_tac "is_static sm")
   920 apply   (case_tac "is_static sm")
   921 apply     simp
   921 apply     simp
   922 apply     (simp add: np_no_jump)
   922 apply     (simp add: np_no_jump)
   923 done
   923 done
   924 declare split_paired_All [simp] split_paired_Ex [simp] 
   924 declare split_paired_All [simp] split_paired_Ex [simp] 
   925 declare split_if     [split] split_if_asm     [split] 
   925 declare if_split     [split] if_split_asm     [split] 
   926         option.split [split] option.split_asm [split]
   926         option.split [split] option.split_asm [split]
   927 setup \<open>map_theory_claset (fn ctxt => ctxt addSbefore ("split_all_tac", split_all_tac))\<close>
   927 setup \<open>map_theory_claset (fn ctxt => ctxt addSbefore ("split_all_tac", split_all_tac))\<close>
   928 setup \<open>map_theory_simpset (fn ctxt => ctxt addloop ("split_all_tac", split_all_tac))\<close>
   928 setup \<open>map_theory_simpset (fn ctxt => ctxt addloop ("split_all_tac", split_all_tac))\<close>
   929 
   929 
   930 
   930