src/HOL/Bali/Evaln.thy
changeset 12937 0c4fd7529467
parent 12925 99131847fb93
child 13337 f75dfc606ac7
equal deleted inserted replaced
12936:84eb6c75cfe3 12937:0c4fd7529467
   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