equal
deleted
inserted
replaced
322 lemma evaln_Skip_eq [simp]: "G\<turnstile>s \<midarrow>Skip\<midarrow>n\<rightarrow> s' = (s = s')" |
322 lemma evaln_Skip_eq [simp]: "G\<turnstile>s \<midarrow>Skip\<midarrow>n\<rightarrow> s' = (s = s')" |
323 apply auto |
323 apply auto |
324 done |
324 done |
325 |
325 |
326 lemma evaln_eval: |
326 lemma evaln_eval: |
327 (assumes evaln: "G\<turnstile>s0 \<midarrow>t\<succ>\<midarrow>n\<rightarrow> (v,s1)" and |
327 assumes evaln: "G\<turnstile>s0 \<midarrow>t\<succ>\<midarrow>n\<rightarrow> (v,s1)" and |
328 wt: "\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T" and |
328 wt: "\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T" and |
329 conf_s0: "s0\<Colon>\<preceq>(G, L)" and |
329 conf_s0: "s0\<Colon>\<preceq>(G, L)" and |
330 wf: "wf_prog G" |
330 wf: "wf_prog G" |
331 |
331 |
332 ) "G\<turnstile>s0 \<midarrow>t\<succ>\<rightarrow> (v,s1)" |
332 shows "G\<turnstile>s0 \<midarrow>t\<succ>\<rightarrow> (v,s1)" |
333 proof - |
333 proof - |
334 from evaln |
334 from evaln |
335 show "\<And> L accC T. \<lbrakk>s0\<Colon>\<preceq>(G, L);\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T\<rbrakk> |
335 show "\<And> L accC T. \<lbrakk>s0\<Colon>\<preceq>(G, L);\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T\<rbrakk> |
336 \<Longrightarrow> G\<turnstile>s0 \<midarrow>t\<succ>\<rightarrow> (v,s1)" |
336 \<Longrightarrow> G\<turnstile>s0 \<midarrow>t\<succ>\<rightarrow> (v,s1)" |
337 (is "PROP ?EqEval s0 s1 t v") |
337 (is "PROP ?EqEval s0 s1 t v") |
475 show ?case |
475 show ?case |
476 by (rule eval.Cond) |
476 by (rule eval.Cond) |
477 next |
477 next |
478 case (Call invDeclC a' accC' args e mn mode n pTs' s0 s1 s2 s4 statT |
478 case (Call invDeclC a' accC' args e mn mode n pTs' s0 s1 s2 s4 statT |
479 v vs L accC T) |
479 v vs L accC T) |
480 (* Repeats large parts of the type soundness proof. One should factor |
480 txt {* Repeats large parts of the type soundness proof. One should factor |
481 out some lemmata about the relations and conformance of s2, s3 and s3'*) |
481 out some lemmata about the relations and conformance of @{text |
|
482 s2}, @{text s3} and @{text s3'} *} |
482 have evaln_e: "G\<turnstile>Norm s0 \<midarrow>e-\<succ>a'\<midarrow>n\<rightarrow> s1" . |
483 have evaln_e: "G\<turnstile>Norm s0 \<midarrow>e-\<succ>a'\<midarrow>n\<rightarrow> s1" . |
483 have evaln_args: "G\<turnstile>s1 \<midarrow>args\<doteq>\<succ>vs\<midarrow>n\<rightarrow> s2" . |
484 have evaln_args: "G\<turnstile>s1 \<midarrow>args\<doteq>\<succ>vs\<midarrow>n\<rightarrow> s2" . |
484 have invDeclC: "invDeclC |
485 have invDeclC: "invDeclC |
485 = invocation_declclass G mode (store s2) a' statT |
486 = invocation_declclass G mode (store s2) a' statT |
486 \<lparr>name = mn, parTs = pTs'\<rparr>" . |
487 \<lparr>name = mn, parTs = pTs'\<rparr>" . |
932 by (auto intro!: hyp_init_c dest: wf_prog_cdecl wf_cdecl_wt_init) |
933 by (auto intro!: hyp_init_c dest: wf_prog_cdecl wf_cdecl_wt_init) |
933 from False eval_init_super eval_init_c s3 |
934 from False eval_init_super eval_init_c s3 |
934 show ?thesis |
935 show ?thesis |
935 by simp |
936 by simp |
936 qed |
937 qed |
937 from cls this |
938 with cls show ?case |
938 show ?case |
|
939 by (rule eval.Init) |
939 by (rule eval.Init) |
940 qed |
940 qed |
941 qed |
941 qed |
942 |
942 |
943 lemma Suc_le_D_lemma: "\<lbrakk>Suc n <= m'; (\<And>m. n <= m \<Longrightarrow> P (Suc m)) \<rbrakk> \<Longrightarrow> P m'" |
943 lemma Suc_le_D_lemma: "\<lbrakk>Suc n <= m'; (\<And>m. n <= m \<Longrightarrow> P (Suc m)) \<rbrakk> \<Longrightarrow> P m'" |
992 by (rule le_maxI2) |
992 by (rule le_maxI2) |
993 finally |
993 finally |
994 show ?thesis . |
994 show ?thesis . |
995 qed |
995 qed |
996 |
996 |
|
997 text {* *} (* FIXME *) |
997 |
998 |
998 lemma eval_evaln: |
999 lemma eval_evaln: |
999 (assumes eval: "G\<turnstile>s0 \<midarrow>t\<succ>\<rightarrow> (v,s1)" and |
1000 assumes eval: "G\<turnstile>s0 \<midarrow>t\<succ>\<rightarrow> (v,s1)" and |
1000 wt: "\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T" and |
1001 wt: "\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T" and |
1001 conf_s0: "s0\<Colon>\<preceq>(G, L)" and |
1002 conf_s0: "s0\<Colon>\<preceq>(G, L)" and |
1002 wf: "wf_prog G" |
1003 wf: "wf_prog G" |
1003 ) "\<exists>n. G\<turnstile>s0 \<midarrow>t\<succ>\<midarrow>n\<rightarrow> (v,s1)" |
1004 shows "\<exists>n. G\<turnstile>s0 \<midarrow>t\<succ>\<midarrow>n\<rightarrow> (v,s1)" |
1004 proof - |
1005 proof - |
1005 from eval |
1006 from eval |
1006 show "\<And> L accC T. \<lbrakk>s0\<Colon>\<preceq>(G, L);\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T\<rbrakk> |
1007 show "\<And> L accC T. \<lbrakk>s0\<Colon>\<preceq>(G, L);\<lparr>prg=G,cls=accC,lcl=L\<rparr>\<turnstile>t\<Colon>T\<rbrakk> |
1007 \<Longrightarrow> \<exists> n. G\<turnstile>s0 \<midarrow>t\<succ>\<midarrow>n\<rightarrow> (v,s1)" |
1008 \<Longrightarrow> \<exists> n. G\<turnstile>s0 \<midarrow>t\<succ>\<midarrow>n\<rightarrow> (v,s1)" |
1008 (is "PROP ?EqEval s0 s1 t v") |
1009 (is "PROP ?EqEval s0 s1 t v") |
1183 have "G\<turnstile>obj_ty (the (globs (store s2) (Heap a)))\<preceq>Class catchC" |
1184 have "G\<turnstile>obj_ty (the (globs (store s2) (Heap a)))\<preceq>Class catchC" |
1184 by (cases s2) simp |
1185 by (cases s2) simp |
1185 with xcpt_s2 conf_s2 wf |
1186 with xcpt_s2 conf_s2 wf |
1186 have "new_xcpt_var vn s2\<Colon>\<preceq>(G, L(VName vn\<mapsto>Class catchC))" |
1187 have "new_xcpt_var vn s2\<Colon>\<preceq>(G, L(VName vn\<mapsto>Class catchC))" |
1187 by (auto dest: Try_lemma) |
1188 by (auto dest: Try_lemma) |
1188 (* FIXME extract lemma for this conformance, also usefull for |
1189 (* FIXME extract lemma for this conformance, also useful for |
1189 eval_type_sound and evaln_eval *) |
1190 eval_type_sound and evaln_eval *) |
1190 from this wt_c2 |
1191 from this wt_c2 |
1191 obtain m where "G\<turnstile>new_xcpt_var vn s2 \<midarrow>c2\<midarrow>m\<rightarrow> s3" |
1192 obtain m where "G\<turnstile>new_xcpt_var vn s2 \<midarrow>c2\<midarrow>m\<rightarrow> s3" |
1192 by (auto dest: hyp_c2) |
1193 by (auto dest: hyp_c2) |
1193 with True that |
1194 with True that |