584 |
584 |
585 lemma state_ok_exec: "\<lbrakk>xs::\<preceq>E; wf_java_prog (prg E); wtpd_stmt E st; |
585 lemma state_ok_exec: "\<lbrakk>xs::\<preceq>E; wf_java_prog (prg E); wtpd_stmt E st; |
586 (xs,st,xs') \<in> Eval.exec (prg E)\<rbrakk> \<Longrightarrow> xs'::\<preceq>E" |
586 (xs,st,xs') \<in> Eval.exec (prg E)\<rbrakk> \<Longrightarrow> xs'::\<preceq>E" |
587 apply (simp only: wtpd_stmt_def) |
587 apply (simp only: wtpd_stmt_def) |
588 apply (case_tac xs', case_tac xs) |
588 apply (case_tac xs', case_tac xs) |
589 apply (auto intro: exec_type_sound) |
589 apply (auto dest: exec_type_sound) |
590 done |
590 done |
591 |
591 |
592 |
592 |
593 lemma state_ok_init: |
593 lemma state_ok_init: |
594 "\<lbrakk> wf_java_prog G; (x, h, l)::\<preceq>(env_of_jmb G C S); |
594 "\<lbrakk> wf_java_prog G; (x, h, l)::\<preceq>(env_of_jmb G C S); |
648 |
648 |
649 lemma eval_conf: "\<lbrakk>G \<turnstile> s -e\<succ>v-> s'; wf_java_prog G; s::\<preceq>E; |
649 lemma eval_conf: "\<lbrakk>G \<turnstile> s -e\<succ>v-> s'; wf_java_prog G; s::\<preceq>E; |
650 E\<turnstile>e::T; gx s' = None; prg E = G \<rbrakk> |
650 E\<turnstile>e::T; gx s' = None; prg E = G \<rbrakk> |
651 \<Longrightarrow> G,gh s'\<turnstile>v::\<preceq>T" |
651 \<Longrightarrow> G,gh s'\<turnstile>v::\<preceq>T" |
652 apply (simp add: gh_def) |
652 apply (simp add: gh_def) |
653 apply (rule_tac x2="fst s" and "s2"="snd s"and "x'2"="fst s'" |
653 apply (rule_tac x3="fst s" and "s3"="snd s"and "x'3"="fst s'" |
654 in eval_type_sound [THEN conjunct2 [THEN mp], simplified]) |
654 in eval_type_sound [THEN conjunct2 [THEN conjunct1 [THEN mp]], simplified]) |
655 apply (rule sym) apply assumption |
655 apply assumption+ |
656 apply assumption |
|
657 apply (simp (no_asm_use) add: surjective_pairing [THEN sym]) |
656 apply (simp (no_asm_use) add: surjective_pairing [THEN sym]) |
658 apply (simp only: surjective_pairing [THEN sym]) |
657 apply (simp only: surjective_pairing [THEN sym]) |
659 apply (auto simp add: gs_def gx_def) |
658 apply (auto simp add: gs_def gx_def) |
660 done |
659 done |
661 |
660 |
1186 (* show list_all2 (conf G h) pvs pTs *) |
1185 (* show list_all2 (conf G h) pvs pTs *) |
1187 apply (erule exE)+ apply (erule conjE)+ |
1186 apply (erule exE)+ apply (erule conjE)+ |
1188 apply (rule_tac Ts="pTsa" in conf_list_gext_widen) apply assumption |
1187 apply (rule_tac Ts="pTsa" in conf_list_gext_widen) apply assumption |
1189 apply (subgoal_tac "((gx s1, gs s1), ps, pvs, x, h, l) \<in> evals G") |
1188 apply (subgoal_tac "((gx s1, gs s1), ps, pvs, x, h, l) \<in> evals G") |
1190 apply (frule_tac E="env_of_jmb G CL S" in evals_type_sound) |
1189 apply (frule_tac E="env_of_jmb G CL S" in evals_type_sound) |
|
1190 apply assumption+ |
1191 apply (simp only: env_of_jmb_fst) |
1191 apply (simp only: env_of_jmb_fst) |
1192 apply assumption |
|
1193 apply (simp add: conforms_def xconf_def gs_def) |
1192 apply (simp add: conforms_def xconf_def gs_def) |
1194 apply simp |
1193 apply simp |
1195 apply (simp (no_asm_use) only: gx_def gs_def surjective_pairing [THEN sym]) |
1194 apply (simp (no_asm_use) only: gx_def gs_def surjective_pairing [THEN sym]) |
1196 apply (simp (no_asm_use) only: ty_exprs_list_all2) apply simp |
1195 apply (simp (no_asm_use) only: ty_exprs_list_all2) apply simp |
|
1196 apply simp |
1197 apply (simp (no_asm_use) only: gx_def gs_def surjective_pairing [THEN sym]) |
1197 apply (simp (no_asm_use) only: gx_def gs_def surjective_pairing [THEN sym]) |
1198 (* list_all2 (\<lambda>T T'. G \<turnstile> T \<preceq> T') pTsa pTs *) |
1198 (* list_all2 (\<lambda>T T'. G \<turnstile> T \<preceq> T') pTsa pTs *) |
1199 apply (rule max_spec_widen, simp only: env_of_jmb_fst) |
1199 apply (rule max_spec_widen, simp only: env_of_jmb_fst) |
1200 |
1200 |
1201 |
1201 |