src/HOL/MicroJava/J/JTypeSafe.thy
changeset 32367 a508148f7c25
parent 32149 ef59550a55d3
child 33954 1bc3b688548c
equal deleted inserted replaced
32366:b269b56b6a14 32367:a508148f7c25
   181 ML{*
   181 ML{*
   182 val forward_hyp_tac = ALLGOALS (TRY o (EVERY' [dtac spec, mp_tac,
   182 val forward_hyp_tac = ALLGOALS (TRY o (EVERY' [dtac spec, mp_tac,
   183   (mp_tac ORELSE' (dtac spec THEN' mp_tac)), REPEAT o (etac conjE)]))
   183   (mp_tac ORELSE' (dtac spec THEN' mp_tac)), REPEAT o (etac conjE)]))
   184 *}
   184 *}
   185 
   185 
   186 declare [[unify_search_bound = 40, unify_trace_bound = 40]]
       
   187 
       
   188 
   186 
   189 theorem eval_evals_exec_type_sound: 
   187 theorem eval_evals_exec_type_sound: 
   190 "wf_java_prog G ==>  
   188 "wf_java_prog G ==>  
   191   (G\<turnstile>(x,(h,l)) -e  \<succ>v  -> (x', (h',l')) -->  
   189   (G\<turnstile>(x,(h,l)) -e  \<succ>v  -> (x', (h',l')) -->  
   192       (\<forall>lT.   (x,(h ,l ))::\<preceq>(G,lT) --> (\<forall>T . (G,lT)\<turnstile>e  :: T -->  
   190       (\<forall>lT.   (x,(h ,l ))::\<preceq>(G,lT) --> (\<forall>T . (G,lT)\<turnstile>e  :: T -->  
   366 apply blast
   364 apply blast
   367 apply (simp (no_asm_simp))+ 
   365 apply (simp (no_asm_simp))+ 
   368 
   366 
   369 done
   367 done
   370 
   368 
   371 declare [[unify_search_bound = 20, unify_trace_bound = 20]]
       
   372 
       
   373 
   369 
   374 lemma eval_type_sound: "!!E s s'.  
   370 lemma eval_type_sound: "!!E s s'.  
   375   [| wf_java_prog G; G\<turnstile>(x,s) -e\<succ>v -> (x',s'); (x,s)::\<preceq>E; E\<turnstile>e::T; G=prg E |]  
   371   [| wf_java_prog G; G\<turnstile>(x,s) -e\<succ>v -> (x',s'); (x,s)::\<preceq>E; E\<turnstile>e::T; G=prg E |]  
   376   ==> (x',s')::\<preceq>E \<and> (x'=None --> G,heap s'\<turnstile>v::\<preceq>T) \<and> heap s \<le>| heap s'"
   372   ==> (x',s')::\<preceq>E \<and> (x'=None --> G,heap s'\<turnstile>v::\<preceq>T) \<and> heap s \<le>| heap s'"
   377 apply (simp (no_asm_simp) only: split_tupled_all)
   373 apply (simp (no_asm_simp) only: split_tupled_all)