src/HOL/MicroJava/J/Eval.ML
author oheimb
Fri, 14 Jul 2000 16:32:51 +0200
changeset 9346 297dcbf64526
parent 8011 d14c4e9e9c8e
child 10042 7164dc0d24d8
permissions -rw-r--r--
re-structuring MicroJava; added Example; corrected := syntax; simplfied cast

(*  Title:      HOL/MicroJava/J/Eval.ML
    ID:         $Id$
    Author:     David von Oheimb
    Copyright   1999 Technische Universitaet Muenchen
*)

Goal "\\<lbrakk>new_Addr (heap s) = (a,x); \
\      s' = c_hupd (heap s(a\\<mapsto>(C,init_vars (fields (G,C))))) (x,s)\\<rbrakk> \\<Longrightarrow> \
\      G\\<turnstile>Norm s -NewC C\\<succ>Addr a\\<rightarrow> s'";
by (hyp_subst_tac 1);
br eval_evals_exec.NewC 1;
by Auto_tac;
qed "NewCI";

Goal "\\<And>s s'. (G\\<turnstile>(x,s) -e \\<succ>  v \\<rightarrow> (x',s') \\<longrightarrow> x'=None \\<longrightarrow> x=None) \\<and> \
\             (G\\<turnstile>(x,s) -es[\\<succ>]vs\\<rightarrow> (x',s') \\<longrightarrow> x'=None \\<longrightarrow> x=None) \\<and> \
\             (G\\<turnstile>(x,s) -c       \\<rightarrow> (x',s') \\<longrightarrow> x'=None \\<longrightarrow> x=None)";
by(split_all_tac 1);
by(rtac eval_evals_exec.induct 1);
by(rewtac c_hupd_def);
by(ALLGOALS Asm_full_simp_tac);
qed "eval_evals_exec_no_xcpt";

val eval_no_xcpt = prove_goal thy "\\<And>X. G\\<turnstile>(x,s) -e\\<succ>v\\<rightarrow> (None,s') \\<Longrightarrow> x=None" (K [
	dtac (eval_evals_exec_no_xcpt RS conjunct1 RS mp) 1,
	Fast_tac 1]);
val evals_no_xcpt = prove_goal thy "\\<And>X. G\\<turnstile>(x,s) -e[\\<succ>]v\\<rightarrow> (None,s') \\<Longrightarrow> x=None" (K [
	dtac (eval_evals_exec_no_xcpt RS conjunct2 RS conjunct1 RS mp) 1,
	Fast_tac 1]);

val eval_evals_exec_xcpt = prove_goal thy 
"\\<And>s s'. (G\\<turnstile>(x,s) -e \\<succ>  v \\<rightarrow> (x',s') \\<longrightarrow> x=Some xc \\<longrightarrow> x'=Some xc \\<and> s'=s) \\<and> \
\        (G\\<turnstile>(x,s) -es[\\<succ>]vs\\<rightarrow> (x',s') \\<longrightarrow> x=Some xc \\<longrightarrow> x'=Some xc \\<and> s'=s) \\<and> \
\        (G\\<turnstile>(x,s) -c       \\<rightarrow> (x',s') \\<longrightarrow> x=Some xc \\<longrightarrow> x'=Some xc \\<and> s'=s)"
 (K [
	split_all_tac 1,
	rtac eval_evals_exec.induct 1,
	rewtac c_hupd_def,
	ALLGOALS Asm_full_simp_tac]);
val eval_xcpt = prove_goal thy 
"\\<And>X. G\\<turnstile>(Some xc,s) -e\\<succ>v\\<rightarrow> (x',s') \\<Longrightarrow> x'=Some xc \\<and>  s'=s" (K [
	dtac (eval_evals_exec_xcpt RS conjunct1 RS mp) 1,
	Fast_tac 1]);
val exec_xcpt = prove_goal thy 
"\\<And>X. G\\<turnstile>(Some xc,s) -s0\\<rightarrow> (x',s') \\<Longrightarrow> x'=Some xc \\<and>  s'=s" (K [
	dtac (eval_evals_exec_xcpt RS conjunct2 RS conjunct2 RS mp) 1,
	Fast_tac 1]);