src/HOL/MicroJava/Comp/CorrComp.thy
changeset 77645 7edbb16bc60f
parent 67613 ce654b0e6d69
child 80914 d97fdabd9e2b
equal deleted inserted replaced
77644:48b4e0cd94cd 77645:7edbb16bc60f
   264   (characterized by class and signature) *)
   264   (characterized by class and signature) *)
   265 definition env_of_jmb :: "java_mb prog \<Rightarrow> cname \<Rightarrow> sig \<Rightarrow> java_mb env" where
   265 definition env_of_jmb :: "java_mb prog \<Rightarrow> cname \<Rightarrow> sig \<Rightarrow> java_mb env" where
   266   "env_of_jmb G C S == 
   266   "env_of_jmb G C S == 
   267   (let (mn,pTs) = S;
   267   (let (mn,pTs) = S;
   268        (D,rT,(pns,lvars,blk,res)) = the(method (G, C) S) in
   268        (D,rT,(pns,lvars,blk,res)) = the(method (G, C) S) in
   269   (G,map_of lvars(pns[\<mapsto>]pTs)(This\<mapsto>Class C)))"
   269   (G,(map_of lvars)(pns[\<mapsto>]pTs, This\<mapsto>Class C)))"
   270 
   270 
   271 lemma env_of_jmb_fst [simp]: "fst (env_of_jmb G C S) = G"
   271 lemma env_of_jmb_fst [simp]: "fst (env_of_jmb G C S) = G"
   272 by (simp add: env_of_jmb_def split_beta)
   272 by (simp add: env_of_jmb_def split_beta)
   273 
   273 
   274 
   274 
   404 lemma wtpd_blk: 
   404 lemma wtpd_blk: 
   405   "\<lbrakk> method (G, D) (md, pTs) = Some (D, rT, (pns, lvars, blk, res)); 
   405   "\<lbrakk> method (G, D) (md, pTs) = Some (D, rT, (pns, lvars, blk, res)); 
   406   wf_prog wf_java_mdecl G; is_class G D \<rbrakk>
   406   wf_prog wf_java_mdecl G; is_class G D \<rbrakk>
   407  \<Longrightarrow> wtpd_stmt (env_of_jmb G D (md, pTs)) blk"
   407  \<Longrightarrow> wtpd_stmt (env_of_jmb G D (md, pTs)) blk"
   408   apply (simp add: wtpd_stmt_def env_of_jmb_def)
   408   apply (simp add: wtpd_stmt_def env_of_jmb_def)
   409   apply (frule_tac P="%D (md, pTs) (rT, (pns, lvars, blk, res)). (G, map_of lvars(pns[\<mapsto>]pTs)(This\<mapsto>Class D)) \<turnstile> blk \<surd> " in method_preserves)
   409   apply (frule_tac P="%D (md, pTs) (rT, (pns, lvars, blk, res)). (G, (map_of lvars)(pns[\<mapsto>]pTs, This\<mapsto>Class D)) \<turnstile> blk \<surd> " in method_preserves)
   410      apply (auto simp: wf_mdecl_def wf_java_mdecl_def)
   410      apply (auto simp: wf_mdecl_def wf_java_mdecl_def)
   411   done
   411   done
   412 
   412 
   413 lemma wtpd_res: 
   413 lemma wtpd_res: 
   414   "\<lbrakk> method (G, D) (md, pTs) = Some (D, rT, (pns, lvars, blk, res)); 
   414   "\<lbrakk> method (G, D) (md, pTs) = Some (D, rT, (pns, lvars, blk, res)); 
   415   wf_prog wf_java_mdecl G; is_class G D \<rbrakk>
   415   wf_prog wf_java_mdecl G; is_class G D \<rbrakk>
   416  \<Longrightarrow> wtpd_expr (env_of_jmb G D (md, pTs)) res"
   416  \<Longrightarrow> wtpd_expr (env_of_jmb G D (md, pTs)) res"
   417   apply (simp add: wtpd_expr_def env_of_jmb_def)
   417   apply (simp add: wtpd_expr_def env_of_jmb_def)
   418   apply (frule_tac P="%D (md, pTs) (rT, (pns, lvars, blk, res)). \<exists>T. (G, map_of lvars(pns[\<mapsto>]pTs)(This\<mapsto>Class D)) \<turnstile> res :: T " in method_preserves)
   418   apply (frule_tac P="%D (md, pTs) (rT, (pns, lvars, blk, res)). \<exists>T. (G, (map_of lvars)(pns[\<mapsto>]pTs, This\<mapsto>Class D)) \<turnstile> res :: T " in method_preserves)
   419      apply (auto simp: wf_mdecl_def wf_java_mdecl_def)
   419      apply (auto simp: wf_mdecl_def wf_java_mdecl_def)
   420   done
   420   done
   421 
   421 
   422 
   422 
   423 (**********************************************************************)
   423 (**********************************************************************)
   537   (\<forall> lvals. 
   537   (\<forall> lvals. 
   538   length lvars = length lvals \<longrightarrow>
   538   length lvars = length lvals \<longrightarrow>
   539    {cG, D, S} \<turnstile>
   539    {cG, D, S} \<turnstile>
   540    {h, os, (a' # pvs @ lvals)}
   540    {h, os, (a' # pvs @ lvals)}
   541    >- (compInitLvars (pns, lvars, blk, res) lvars) \<rightarrow>
   541    >- (compInitLvars (pns, lvars, blk, res) lvars) \<rightarrow>
   542    {h, os, (locvars_xstate G C S (Norm (h, init_vars lvars(pns[\<mapsto>]pvs)(This\<mapsto>a'))))})"
   542    {h, os, (locvars_xstate G C S (Norm (h, (init_vars lvars)(pns[\<mapsto>]pvs, This\<mapsto>a'))))})"
   543   apply (simp only: compInitLvars_def)
   543   apply (simp only: compInitLvars_def)
   544   apply (frule method_yields_wf_java_mdecl, assumption, assumption)
   544   apply (frule method_yields_wf_java_mdecl, assumption, assumption)
   545 
   545 
   546   apply (simp only: wf_java_mdecl_def)
   546   apply (simp only: wf_java_mdecl_def)
   547   apply (subgoal_tac "(\<forall>y\<in>set pns. y \<notin> set (map fst lvars))")
   547   apply (subgoal_tac "(\<forall>y\<in>set pns. y \<notin> set (map fst lvars))")
   585   "\<lbrakk> wf_java_prog G; (x, h, l)::\<preceq>(env_of_jmb G C S); 
   585   "\<lbrakk> wf_java_prog G; (x, h, l)::\<preceq>(env_of_jmb G C S); 
   586   is_class G dynT;
   586   is_class G dynT;
   587   method (G, dynT) (mn, pTs) = Some (md, rT, pns, lvars, blk, res);
   587   method (G, dynT) (mn, pTs) = Some (md, rT, pns, lvars, blk, res);
   588   list_all2 (conf G h) pvs pTs; G,h \<turnstile> a' ::\<preceq> Class md\<rbrakk>
   588   list_all2 (conf G h) pvs pTs; G,h \<turnstile> a' ::\<preceq> Class md\<rbrakk>
   589   \<Longrightarrow>
   589   \<Longrightarrow>
   590   (np a' x, h, init_vars lvars(pns[\<mapsto>]pvs)(This\<mapsto>a'))::\<preceq>(env_of_jmb G md (mn, pTs))"
   590   (np a' x, h, (init_vars lvars)(pns[\<mapsto>]pvs, This\<mapsto>a'))::\<preceq>(env_of_jmb G md (mn, pTs))"
   591   apply (frule wf_prog_ws_prog)
   591   apply (frule wf_prog_ws_prog)
   592   apply (frule method_in_md [THEN conjunct2], assumption+)
   592   apply (frule method_in_md [THEN conjunct2], assumption+)
   593   apply (frule method_yields_wf_java_mdecl, assumption, assumption)
   593   apply (frule method_yields_wf_java_mdecl, assumption, assumption)
   594   apply (simp add: env_of_jmb_def gs_def conforms_def split_beta)
   594   apply (simp add: env_of_jmb_def gs_def conforms_def split_beta)
   595   apply (simp add: wf_java_mdecl_def)
   595   apply (simp add: wf_java_mdecl_def)
  1171             apply (simp only: drop_append)
  1171             apply (simp only: drop_append)
  1172             apply (simp (no_asm_simp))
  1172             apply (simp (no_asm_simp))
  1173            apply (simp (no_asm_simp))
  1173            apply (simp (no_asm_simp))
  1174 
  1174 
  1175           (* show s3::\<preceq>\<dots> *)
  1175           (* show s3::\<preceq>\<dots> *)
  1176           apply (rule_tac xs = "(np a' x, h, init_vars lvars(pns[\<mapsto>]pvs)(This\<mapsto>a'))" and st=blk in state_ok_exec)
  1176           apply (rule_tac xs = "(np a' x, h, (init_vars lvars)(pns[\<mapsto>]pvs, This\<mapsto>a'))" and st=blk in state_ok_exec)
  1177              apply assumption
  1177              apply assumption
  1178             apply (simp (no_asm_simp) only: env_of_jmb_fst)
  1178             apply (simp (no_asm_simp) only: env_of_jmb_fst)
  1179            apply assumption
  1179            apply assumption
  1180           apply (simp (no_asm_use) only: env_of_jmb_fst)
  1180           apply (simp (no_asm_use) only: env_of_jmb_fst)
  1181 
  1181