src/HOL/MicroJava/BV/BVSpecTypeSafe.ML
author nipkow
Mon, 13 Mar 2000 12:51:10 +0100
changeset 8423 3c19160b6432
parent 8387 b7c661c69f4a
child 8442 96023903c2df
permissions -rw-r--r--
exhaust_tac -> cases_tac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/BV/BVSpecTypeSafe.ML
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     2
    ID:         $Id$
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     3
    Author:     Cornelia Pusch
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
val defs1 = exec.rules@[split_def,sup_state_def,correct_state_def,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
		correct_frame_def,wt_instr_def];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     9
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
Goalw [correct_state_def,Let_def,correct_frame_def,split_def]
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
"\\<lbrakk> wt_jvm_prog G phi; \
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
    12
\   method (G,C) sig = Some (C,rT,maxl,ins); \
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
    13
\   G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
\\\<Longrightarrow> wt_instr (ins!pc) G rT (phi C sig) (length ins) pc";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
by (Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
by(blast_tac (claset() addIs [wt_jvm_prog_impl_wt_instr]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
qed "wt_jvm_prog_impl_wt_instr_cor";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    20
Delsimps [split_paired_All];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
(******* LS *******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    27
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
\  ins!pc = LS(Load idx); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    29
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    30
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs); \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    31
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    32
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_val_sup,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
	approx_loc_imp_approx_loc_sup] 
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
    35
	addss (simpset() addsimps [map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
qed "Load_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    40
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
\  ins!pc = LS(Store idx); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    42
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    43
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    44
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    45
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
    46
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_subst RSN(2, approx_loc_imp_approx_loc_sup)]
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
    47
	addss (simpset() addsimps [map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
qed "Store_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    50
Goalw [conf_def] "G,h \\<turnstile> Intg i \\<Colon>\\<preceq> PrimT Integer";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    51
by(Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    52
qed "conf_Intg_Integer";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    53
AddIffs [conf_Intg_Integer];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    55
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    56
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    57
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    58
\  ins!pc = LS(Bipush i); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    59
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    60
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    61
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    62
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    63
by (fast_tac (claset()addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup]
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
    64
	addss (simpset() addsimps [approx_val_def,sup_PTS_eq,map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
qed "Bipush_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    66
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
Goal "G \\<turnstile> T' \\<preceq> T \\<Longrightarrow> T' = NT \\<longrightarrow> (T=NT | (\\<exists>C. T = Class C))";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    68
be widen.induct 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    69
by(Auto_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    70
by(rename_tac "R" 1);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
    71
by(cases_tac "R" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    72
by(Auto_tac);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    73
val lemma = result();
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    74
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    75
Goal "G \\<turnstile> NT \\<preceq> T = (T=NT | (\\<exists>C. T = Class C))";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    76
by(force_tac (claset() addIs widen.intrs addDs [lemma],simpset()) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    77
qed "NT_subtype_conv";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    78
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    79
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    81
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    82
\  ins!pc = LS Aconst_null; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    83
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    84
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    85
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    86
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    87
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup]
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
    88
	addss (simpset() addsimps [approx_val_Null,NT_subtype_conv,map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    89
qed "Aconst_null_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    90
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    91
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    92
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    93
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    94
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    95
\  ins!pc = LS ls_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    96
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    97
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
    98
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    99
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   100
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   101
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   102
by(rewtac wt_jvm_prog_def);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   103
by (cases_tac "ls_com" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   104
by (ALLGOALS (fast_tac (claset() addIs [Load_correct,Store_correct,Bipush_correct,Aconst_null_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   105
qed "LS_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   106
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   107
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   108
(**** CH ****)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   109
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   110
Goalw [cast_ok_def]
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   111
 "\\<lbrakk> wf_prog ok G; G,h\\<turnstile>v\\<Colon>\\<preceq>RefT rt; cast_ok G (Class C) h v ; G\\<turnstile>(Class C)\\<preceq>T'; is_class G C \\<rbrakk> \
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   112
\ \\<Longrightarrow> G,h\\<turnstile>v\\<Colon>\\<preceq>T'";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   113
be disjE 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   114
 by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   115
by (forward_tac [widen_Class] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   116
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   117
be disjE 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   118
 by (asm_full_simp_tac (simpset() addsimps [widen.null]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   119
by (asm_full_simp_tac (simpset() addsimps [conf_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   120
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   121
by (asm_full_simp_tac (simpset() addsimps [obj_ty_def]) 1);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   122
by (cases_tac "v" 1);
8185
59b62e8804b4 Rduced Class C <= Class D to C <= D.
nipkow
parents: 8119
diff changeset
   123
by (ALLGOALS (fast_tac  (claset() addIs [rtrancl_trans] addss (simpset() addsimps [widen.null]))));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   124
qed "Cast_conf2";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   125
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   126
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   127
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   128
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   129
\  ins!pc = CH (Checkcast D); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   130
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   131
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   132
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   133
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   134
by (asm_full_simp_tac (simpset() addsimps [map_eq_Cons,
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
   135
		raise_xcpt_def]@defs1 addsplits [option.split]) 1);
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   136
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup,Cast_conf2] 
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   137
	addss (simpset() addsimps [map_eq_Cons,approx_val_def])) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   138
qed "Checkcast_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   139
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   140
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   141
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   142
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   143
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   144
\  ins!pc = CH ch_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   145
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   146
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   147
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   148
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   149
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   150
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   151
by(rewtac wt_jvm_prog_def);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   152
by (cases_tac "ch_com" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   153
by (ALLGOALS (fast_tac (claset() addIs [Checkcast_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   154
qed "CH_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   155
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   156
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   157
(******* MO *******)
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   158
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   159
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   160
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   161
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   162
\  ins!pc = MO (Getfield F D); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   163
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   164
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   165
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   166
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
   167
by (asm_full_simp_tac (simpset() addsimps [raise_xcpt_def]@defs1 addsplits [option.split]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   168
by (Clarify_tac 1);
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   169
by (asm_full_simp_tac (simpset() addsimps [sup_state_def,map_eq_Cons]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   170
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   171
by (asm_full_simp_tac (simpset() addsimps [approx_val_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   172
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   173
by (forward_tac [conf_widen] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   174
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   175
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   176
bd conf_RefTD 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   177
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   178
by (asm_full_simp_tac (simpset() addsimps []) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   179
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   180
br conjI 1;
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   181
 bd widen_cfs_fields 1;
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   182
   ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   183
  ba 1;
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   184
 by(fast_tac (claset() addIs [conf_widen] addss (simpset() addsimps [hconf_def,oconf_def,lconf_def])) 1);
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   185
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   186
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   187
qed "Getfield_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   188
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   189
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   190
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   191
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   192
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   193
\  ins!pc = MO (Putfield F D); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   194
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   195
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   196
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   197
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
   198
by (asm_full_simp_tac (simpset() addsimps [raise_xcpt_def]@defs1 addsplits [option.split]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   199
by (Clarify_tac 1);
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   200
by (asm_full_simp_tac (simpset() addsimps [sup_state_def,map_eq_Cons]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   201
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   202
by (asm_full_simp_tac (simpset() addsimps [approx_val_def]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   203
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   204
by (forward_tac [conf_widen] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   205
  ba 2;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   206
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   207
by (fast_tac (claset() addDs [conf_RefTD,widen_cfs_fields] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   208
	addIs [sup_heap_update_value,approx_stk_imp_approx_stk_sup_heap RSN(2,approx_stk_imp_approx_stk_sup),
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   209
		approx_loc_imp_approx_loc_sup_heap RSN(2,approx_loc_imp_approx_loc_sup),
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   210
		hconf_imp_hconf_field_update,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   211
		correct_frames_imp_correct_frames_field_update,conf_widen] addss (simpset())) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   212
qed "Putfield_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   213
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   214
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   215
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   216
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   217
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   218
\  ins!pc = MO mo_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   219
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   220
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   221
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   222
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   223
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   224
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   225
by(rewtac wt_jvm_prog_def);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   226
by (cases_tac "mo_com" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   227
by (ALLGOALS (fast_tac (claset() addIs [Getfield_correct,Putfield_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   228
qed "MO_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   229
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   230
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   231
(****** CO ******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   232
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   233
Goal "(\\<forall>x y. P(x,y)) = (\\<forall>z. P z)";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   234
by(Fast_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   235
qed "collapse_paired_All";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   236
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   237
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   238
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   239
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   240
\  ins!pc = CO(New cl_idx); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   241
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   242
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   243
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   244
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   245
by (fast_tac (claset() addSDs [collapse_paired_All RS iffD1]addIs [sup_heap_newref,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   246
		approx_stk_imp_approx_stk_sup_heap RSN(2,approx_stk_imp_approx_stk_sup),
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   247
		approx_loc_imp_approx_loc_sup_heap RSN(2,approx_loc_imp_approx_loc_sup),
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   248
		hconf_imp_hconf_newref,correct_frames_imp_correct_frames_newref,
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   249
		rewrite_rule [split_def] correct_init_obj]
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   250
	addss (simpset() addsimps [NT_subtype_conv,approx_val_def,conf_def,
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   251
		fun_upd_apply,map_eq_Cons,is_class_def,raise_xcpt_def,init_vars_def]@defs1 
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   252
	addsplits [option.split])) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   253
qed "New_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   254
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   255
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   256
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   257
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   258
\  ins!pc = CO co_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   259
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   260
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   261
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   262
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   263
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   264
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   265
by(rewtac wt_jvm_prog_def);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   266
by (cases_tac "co_com" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   267
by (ALLGOALS (fast_tac (claset() addIs [New_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   268
qed "CO_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   269
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   270
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   271
(****** MI ******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   272
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   273
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   274
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   275
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   276
\  ins ! pc = MI(Invoke mn pTs); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   277
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   278
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   279
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   280
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   281
by(forward_tac [wt_jvm_progD] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   282
by(etac exE 1);
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   283
by(asm_full_simp_tac (simpset() addsimps defs1) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   284
by(Clarify_tac 1);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   285
by(case_tac "X\\<noteq>NT" 1); 
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   286
 by (asm_full_simp_tac (simpset()addsimps[raise_xcpt_def]@defs1 
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   287
	addsplits [option.split]) 1);
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   288
 by (Clarify_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   289
 by (asm_full_simp_tac (simpset() addsimps defs1) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   290
 bd approx_stk_append_lemma 1;   
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   291
 by (Clarify_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   292
 by (asm_full_simp_tac (simpset() addsimps [approx_val_def]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   293
 bd conf_RefTD 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   294
 by (Clarify_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   295
 by(rename_tac "oloc oT ofs T'" 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   296
 by (asm_full_simp_tac (simpset() addsimps defs1) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   297
 bd subtype_widen_methd 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   298
   ba 1;
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   299
  ba 1;
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   300
 be exE 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   301
 by(rename_tac "oT'" 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   302
 by (Clarify_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   303
 by(subgoal_tac "G \\<turnstile> oT \\<preceq>C oT'" 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   304
  by(forw_inst_tac [("C","oT")](standard(rotate_prems 1 method_wf_mdecl)) 2);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   305
   ba 2;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   306
  by(Blast_tac 2);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   307
 by (asm_full_simp_tac (simpset() addsimps defs1) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   308
 by(forward_tac [method_in_md] 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   309
  ba 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   310
  back();
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   311
  back();
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   312
 by (Clarify_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   313
 by (asm_full_simp_tac (simpset() addsimps defs1) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   314
 by (forward_tac [wt_jvm_prog_impl_wt_start] 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   315
  ba 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   316
  back();
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   317
 by (asm_full_simp_tac (simpset() addsimps [wt_start_def,sup_state_def]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   318
 by (Clarify_tac 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   319
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   320
(** approx_loc **)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   321
 br conjI 1;
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   322
  br approx_loc_imp_approx_loc_sup 1;
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   323
    ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   324
   by (Fast_tac 2);
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   325
  by (asm_full_simp_tac (simpset() addsimps [split_def,approx_val_def,approx_loc_append]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   326
  br conjI 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   327
   br conf_widen 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   328
     ba 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   329
    by (Fast_tac 2);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   330
   by (asm_full_simp_tac (simpset() addsimps [conf_def]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   331
  br conjI 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   332
   by (fast_tac (claset() addIs [approx_stk_rev RS iffD2 RSN(4,assConv_approx_stk_imp_approx_loc)] 
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   333
 	addss (simpset() addsimps [split_def,approx_val_def])) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   334
  by (asm_simp_tac (simpset() addsimps [list_all2_def,split_def,approx_loc_def,approx_val_None,set_replicate_conv_if]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   335
 
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   336
 br conjI 1;
8387
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   337
  by (asm_simp_tac (simpset() addsimps [min_def]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   338
 br exI 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   339
 br exI 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   340
 br conjI 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   341
  by(Blast_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   342
 by (fast_tac (claset()
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   343
        addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup]
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   344
        addss (simpset()addsimps [map_eq_Cons])) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   345
by (Asm_full_simp_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   346
bd approx_stk_append_lemma 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   347
by (Clarify_tac 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   348
by (asm_full_simp_tac (simpset() addsimps [approx_val_def, raise_xcpt_def]) 1);
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   349
bd conf_NullTD 1;
b7c661c69f4a added NT case for method invocation
kleing
parents: 8185
diff changeset
   350
by (Asm_simp_tac 1);
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   351
qed "Invoke_correct";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   352
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   353
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   354
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   355
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   356
\  ins!pc = MI mi_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   357
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   358
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   359
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   360
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   361
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   362
 ba 1;
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   363
by (cases_tac "mi_com" 1);
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   364
by (ALLGOALS (fast_tac (claset() addIs [Invoke_correct])));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   365
qed "MI_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   366
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   367
(****** MR ******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   368
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   369
Delsimps [map_append];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   370
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   371
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   372
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   373
\  ins ! pc = MR Return; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   374
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   375
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   376
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   377
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   378
by (asm_full_simp_tac (simpset() addsimps (neq_Nil_conv::defs1) addsplits [split_if_asm]) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   379
by (Clarify_tac 1);
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   380
by (asm_full_simp_tac (simpset() addsimps [map_eq_Cons]@defs1) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   381
by (Clarify_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   382
by (asm_full_simp_tac (simpset() addsimps defs1) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   383
by (forward_tac [wt_jvm_prog_impl_wt_instr] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   384
  by(EVERY1[atac, etac Suc_lessD]);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   385
by(rewtac wt_jvm_prog_def);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   386
by (fast_tac (claset()
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   387
 addDs [subcls_widen_methd]
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   388
 addEs [rotate_prems 1 widen_trans]
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   389
 addIs [conf_widen]
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   390
 addss (simpset() addsimps [approx_val_def,append_eq_conv_conj,map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   391
qed "Return_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   392
Addsimps [map_append];
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   393
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   394
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   395
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   396
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   397
\  ins!pc = MR mr; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   398
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   399
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   400
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   401
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   402
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   403
 ba 1;
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   404
by (cases_tac "mr" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   405
by (ALLGOALS (fast_tac (claset() addIs [Return_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   406
qed "MR_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   407
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   408
(****** BR ******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   409
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   410
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   411
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   412
\  ins ! pc = BR(Goto branch); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   413
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   414
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   415
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   416
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   417
by (fast_tac (claset() addIs [approx_loc_imp_approx_loc_sup,approx_stk_imp_approx_stk_sup]
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   418
	addss (simpset() addsimps defs1)) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   419
qed "Goto_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   420
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   421
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   422
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   423
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   424
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   425
\  ins!pc = BR(Ifcmpeq branch); \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   426
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   427
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   428
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   429
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   430
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup] addss (simpset() addsimps defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   431
qed "Ifiacmpeq_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   432
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   433
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   434
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   435
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   436
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   437
\  ins!pc = BR br_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   438
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   439
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   440
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   441
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   442
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   443
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   444
by(rewtac wt_jvm_prog_def);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   445
by (cases_tac "br_com" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   446
by (ALLGOALS (fast_tac (claset() addIs [Goto_correct,Ifiacmpeq_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   447
qed "BR_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   448
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   449
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   450
(****** OS ******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   451
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   452
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   453
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   454
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   455
\  ins ! pc = OS Pop; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   456
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   457
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   458
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   459
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   460
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_loc_imp_approx_loc_sup] addss (simpset() addsimps defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   461
qed "Pop_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   462
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   463
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   464
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   465
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   466
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   467
\  ins ! pc = OS Dup; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   468
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   469
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   470
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   471
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   472
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_val_imp_approx_val_sup,approx_loc_imp_approx_loc_sup] 
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   473
	addss (simpset() addsimps [map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   474
qed "Dup_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   475
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   476
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   477
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   478
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   479
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   480
\  ins ! pc = OS Dup_x1; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   481
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   482
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   483
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   484
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   485
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_val_imp_approx_val_sup,approx_loc_imp_approx_loc_sup] 
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   486
	addss (simpset() addsimps [map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   487
qed "Dup_x1_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   488
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   489
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   490
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   491
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   492
\  ins ! pc = OS Dup_x2; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   493
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   494
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   495
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   496
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   497
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_val_imp_approx_val_sup,approx_loc_imp_approx_loc_sup] 
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   498
	addss (simpset() addsimps [map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   499
qed "Dup_x2_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   500
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   501
Goal 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   502
"\\<lbrakk> wf_prog wt G; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   503
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   504
\  ins ! pc = OS Swap; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   505
\  wt_instr (ins!pc) G rT (phi C sig) (length ins) pc; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   506
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   507
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   508
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8119
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   509
by (fast_tac (claset() addIs [approx_stk_imp_approx_stk_sup,approx_val_imp_approx_val_sup,approx_loc_imp_approx_loc_sup] 
60b606eddec8 Move some lemmas to List.
nipkow
parents: 8048
diff changeset
   510
	addss (simpset() addsimps [map_eq_Cons]@defs1)) 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   511
qed "Swap_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   512
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   513
Goal
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   514
"\\<lbrakk> wt_jvm_prog G phi; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   515
\  method (G,C) sig = Some (C,rT,maxl,ins); \
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   516
\  ins!pc = OS os_com; \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   517
\  Some state' = exec (G, None, hp, (stk,loc,C,sig,pc)#frs) ; \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   518
\  G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \\<rbrakk> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   519
\\\<Longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   520
by(forward_tac [wt_jvm_prog_impl_wt_instr_cor] 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   521
  ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   522
 ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   523
by(rewtac wt_jvm_prog_def);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   524
by (cases_tac "os_com" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   525
by (ALLGOALS (fast_tac (claset() addIs [Pop_correct,Dup_correct,Dup_x1_correct,Dup_x2_correct,Swap_correct])));
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   526
qed "OS_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   527
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   528
(** Main **)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   529
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   530
Goalw [correct_state_def,Let_def]
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   531
 "G,phi \\<turnstile>JVM (None, hp, (stk,loc,C,sig,pc)#frs)\\<surd> \
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   532
\ \\<Longrightarrow> \\<exists>meth. method (G,C) sig = Some(C,meth)";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   533
by(Asm_full_simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   534
by(Blast_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
   535
qed "correct_state_impl_Some_method";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   536
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   537
Goal
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   538
"\\<And>state. \\<lbrakk> wt_jvm_prog G phi; G,phi \\<turnstile>JVM state\\<surd>\\<rbrakk> \
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   539
\ \\<Longrightarrow> exec (G,state) = Some state' \\<longrightarrow> G,phi \\<turnstile>JVM state'\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   540
by(split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   541
by(rename_tac "xp hp frs" 1);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   542
by (cases_tac "xp" 1);
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   543
 by (cases_tac "frs" 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   544
  by (asm_full_simp_tac (simpset() addsimps exec.rules) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   545
 by(split_all_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   546
 by(hyp_subst_tac 1);
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
   547
 by(forward_tac [correct_state_impl_Some_method] 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   548
 by (force_tac (claset() addIs [LS_correct,CO_correct,MO_correct,CH_correct,MI_correct,MR_correct,OS_correct,
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   549
	BR_correct], simpset() addsplits [split_if_asm,instr.split,instr.split_asm] addsimps exec.rules@[split_def]) 1);
8423
3c19160b6432 exhaust_tac -> cases_tac
nipkow
parents: 8387
diff changeset
   550
by (cases_tac "frs" 1);
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   551
 by (ALLGOALS(asm_full_simp_tac (simpset() addsimps exec.rules)));
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   552
qed_spec_mp "BV_correct_1";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   553
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   554
(*******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   555
Goal
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   556
"\\<lbrakk> xp=None; frs\\<noteq>[] \\<rbrakk> \\<Longrightarrow> (\\<exists>state'. exec (G,xp,hp,frs) = Some state')";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   557
by (fast_tac (claset() addIs [BV_correct_1] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   558
	addss (simpset() addsplits [instr.split] addsimps [neq_Nil_conv]@defs1)) 1);
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   559
val lemma = result();
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   560
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   561
Goal
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   562
"\\<lbrakk> wt_jvm_prog G phi; G,phi \\<turnstile>JVM (xp,hp,frs)\\<surd>; xp=None; frs\\<noteq>[] \\<rbrakk> \
8045
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   563
\ \\<Longrightarrow> \\<exists>state'. exec(G,xp,hp,frs) = Some state' \\<and> G,phi \\<turnstile>JVM state'\\<surd>";
816f566c414f Fixed a problem with returning from the last frame.
nipkow
parents: 8034
diff changeset
   564
by (dres_inst_tac [("G","G"),("hp","hp")] lemma 1);
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   565
ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   566
by (fast_tac (claset() addIs [BV_correct_1]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   567
qed "L1";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   568
(*******)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   569
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   570
Goalw [exec_all_def]
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8011
diff changeset
   571
"\\<lbrakk> wt_jvm_prog G phi; G \\<turnstile> s -jvm\\<rightarrow> t \\<rbrakk> \\<Longrightarrow> G,phi \\<turnstile>JVM s\\<surd> \\<longrightarrow> G,phi \\<turnstile>JVM t\\<surd>";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   572
be rtrancl_induct 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   573
 by (Simp_tac 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   574
by (fast_tac (claset() addIs [BV_correct_1] addss (simpset())) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   575
qed_spec_mp "BV_correct";
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   576
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   577
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   578
Goal
8048
b7f7e18eb584 Renamed some vars
nipkow
parents: 8045
diff changeset
   579
"\\<lbrakk> wt_jvm_prog G phi; G \\<turnstile> s0 -jvm\\<rightarrow> (None,hp,(stk,loc,C,sig,pc)#frs); G,phi \\<turnstile>JVM s0 \\<surd>\\<rbrakk> \
b7f7e18eb584 Renamed some vars
nipkow
parents: 8045
diff changeset
   580
\ \\<Longrightarrow>  approx_stk G hp stk (fst (((phi  C)  sig) ! pc)) \\<and> approx_loc G hp loc (snd (((phi  C)  sig) ! pc)) ";
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   581
bd BV_correct 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   582
ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   583
ba 1;
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   584
by (asm_full_simp_tac (simpset() addsimps [correct_state_def,correct_frame_def,split_def] 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   585
	addsplits [option.split_asm]) 1);
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   586
qed_spec_mp "BV_correct_initial";