src/HOL/MicroJava/J/Eval.ML
author oheimb
Tue, 17 Oct 2000 08:41:42 +0200
changeset 10229 10e2d29a77de
parent 10042 7164dc0d24d8
child 10613 78b1d6c3ee9c
permissions -rw-r--r--
cosmetics
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
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
     7
Goal "[|new_Addr (heap s) = (a,x); \
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
     8
\      s' = c_hupd (heap s(a\\<mapsto>(C,init_vars (fields (G,C))))) (x,s)|] ==> \
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
     9
\      G\\<turnstile>Norm s -NewC C\\<succ>Addr a-> s'";
9346
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8011
diff changeset
    10
by (hyp_subst_tac 1);
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8011
diff changeset
    11
br eval_evals_exec.NewC 1;
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8011
diff changeset
    12
by Auto_tac;
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8011
diff changeset
    13
qed "NewCI";
297dcbf64526 re-structuring MicroJava; added Example; corrected := syntax; simplfied cast
oheimb
parents: 8011
diff changeset
    14
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    15
Goal "!!s s'. (G\\<turnstile>(x,s) -e \\<succ>  v -> (x',s') --> x'=None --> x=None) \\<and> \
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    16
\             (G\\<turnstile>(x,s) -es[\\<succ>]vs-> (x',s') --> x'=None --> x=None) \\<and> \
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    17
\             (G\\<turnstile>(x,s) -c       -> (x',s') --> x'=None --> x=None)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
by(split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
by(rtac eval_evals_exec.induct 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    20
by(rewtac c_hupd_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
by(ALLGOALS Asm_full_simp_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
qed "eval_evals_exec_no_xcpt";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    24
val eval_no_xcpt = prove_goal thy "!!X. G\\<turnstile>(x,s) -e\\<succ>v-> (None,s') ==> x=None" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
	dtac (eval_evals_exec_no_xcpt RS conjunct1 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
	Fast_tac 1]);
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    27
val evals_no_xcpt = prove_goal thy "!!X. G\\<turnstile>(x,s) -e[\\<succ>]v-> (None,s') ==> x=None" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
	dtac (eval_evals_exec_no_xcpt RS conjunct2 RS conjunct1 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
	Fast_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
val eval_evals_exec_xcpt = prove_goal thy 
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    32
"!!s s'. (G\\<turnstile>(x,s) -e \\<succ>  v -> (x',s') --> x=Some xc --> x'=Some xc \\<and> s'=s) \\<and> \
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    33
\        (G\\<turnstile>(x,s) -es[\\<succ>]vs-> (x',s') --> x=Some xc --> x'=Some xc \\<and> s'=s) \\<and> \
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    34
\        (G\\<turnstile>(x,s) -c       -> (x',s') --> x=Some xc --> x'=Some xc \\<and> s'=s)"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
 (K [
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
	split_all_tac 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
	rtac eval_evals_exec.induct 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
	rewtac c_hupd_def,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
	ALLGOALS Asm_full_simp_tac]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
val eval_xcpt = prove_goal thy 
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    41
"!!X. G\\<turnstile>(Some xc,s) -e\\<succ>v-> (x',s') ==> x'=Some xc \\<and>  s'=s" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
	dtac (eval_evals_exec_xcpt RS conjunct1 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
	Fast_tac 1]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
val exec_xcpt = prove_goal thy 
10042
7164dc0d24d8 unsymbolized
kleing
parents: 9346
diff changeset
    45
"!!X. G\\<turnstile>(Some xc,s) -s0-> (x',s') ==> x'=Some xc \\<and>  s'=s" (K [
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    46
	dtac (eval_evals_exec_xcpt RS conjunct2 RS conjunct2 RS mp) 1,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    47
	Fast_tac 1]);