equal
deleted
inserted
replaced
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 |