src/HOL/MicroJava/J/Eval.ML
author oheimb
Tue, 04 Jul 2000 10:54:32 +0200
changeset 9240 f4d76cb26433
parent 8011 d14c4e9e9c8e
child 9346 297dcbf64526
permissions -rw-r--r--
added BinOp
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/Eval.ML
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     2
    ID:         $Id$
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     3
    Author:     David von Oheimb
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     4
    Copyright   1999 Technische Universitaet Muenchen
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     5
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     6
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
Goal "\\<And>s s'. (G\\<turnstile>(x,s) -e \\<succ>  v \\<rightarrow> (x',s') \\<longrightarrow> x'=None \\<longrightarrow> x=None) \\<and> \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
\             (G\\<turnstile>(x,s) -es[\\<succ>]vs\\<rightarrow> (x',s') \\<longrightarrow> x'=None \\<longrightarrow> x=None) \\<and> \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     9
\             (G\\<turnstile>(x,s) -c       \\<rightarrow> (x',s') \\<longrightarrow> x'=None \\<longrightarrow> x=None)";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
by(split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
by(rtac eval_evals_exec.induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
by(rewtac c_hupd_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    13
by(ALLGOALS Asm_full_simp_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
qed "eval_evals_exec_no_xcpt";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
val eval_no_xcpt = prove_goal thy "\\<And>X. G\\<turnstile>(x,s) -e\\<succ>v\\<rightarrow> (None,s') \\<Longrightarrow> x=None" (K [
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
	dtac (eval_evals_exec_no_xcpt RS conjunct1 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
	Fast_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
val evals_no_xcpt = prove_goal thy "\\<And>X. G\\<turnstile>(x,s) -e[\\<succ>]v\\<rightarrow> (None,s') \\<Longrightarrow> x=None" (K [
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    20
	dtac (eval_evals_exec_no_xcpt RS conjunct2 RS conjunct1 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
	Fast_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
val eval_evals_exec_xcpt = prove_goal thy 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
"\\<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> \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
\        (G\\<turnstile>(x,s) -es[\\<succ>]vs\\<rightarrow> (x',s') \\<longrightarrow> x=Some xc \\<longrightarrow> x'=Some xc \\<and> s'=s) \\<and> \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
\        (G\\<turnstile>(x,s) -c       \\<rightarrow> (x',s') \\<longrightarrow> x=Some xc \\<longrightarrow> x'=Some xc \\<and> s'=s)"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
 (K [
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
	split_all_tac 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
	rtac eval_evals_exec.induct 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
	rewtac c_hupd_def,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
	ALLGOALS Asm_full_simp_tac]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
val eval_xcpt = prove_goal thy 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
"\\<And>X. G\\<turnstile>(Some xc,s) -e\\<succ>v\\<rightarrow> (x',s') \\<Longrightarrow> x'=Some xc \\<and>  s'=s" (K [
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
	dtac (eval_evals_exec_xcpt RS conjunct1 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
	Fast_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
val exec_xcpt = prove_goal thy 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
"\\<And>X. G\\<turnstile>(Some xc,s) -s0\\<rightarrow> (x',s') \\<Longrightarrow> x'=Some xc \\<and>  s'=s" (K [
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
	dtac (eval_evals_exec_xcpt RS conjunct2 RS conjunct2 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
	Fast_tac 1]);