src/HOL/MicroJava/BV/BVSpec.thy
author kleing
Thu, 06 Jul 2000 12:15:05 +0200
changeset 9260 678e718a5a86
parent 8386 3e56677d3b98
child 9271 c26964691975
permissions -rw-r--r--
new ADD instruction
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/BV/BVSpec.thy
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
Specification of bytecode verifier
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     7
*)
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     8
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
     9
BVSpec = Convert +
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    10
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    11
types
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    12
 method_type 	= "state_type list"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    13
 class_type	= "sig \\<Rightarrow> method_type"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    14
 prog_type	= "cname \\<Rightarrow> class_type"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    15
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    16
consts
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    17
 wt_LS	:: "[load_and_store,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    18
primrec
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
"wt_LS (Load idx) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    20
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
	 idx < length LT \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
	 (\\<exists>ts. (LT ! idx) = Some ts \\<and> 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    25
	       G \\<turnstile> (ts # ST , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    26
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
"wt_LS (Store idx) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    28
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
	 idx < length LT \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
	 (\\<exists>ts ST'. ST = ts # ST' \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    33
		   G \\<turnstile> (ST' , LT[idx:=Some ts]) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    34
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
"wt_LS (Bipush i) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    36
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
	 pc+1 < max_pc \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    39
	 G \\<turnstile> ((PrimT Integer) # ST , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    40
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
"wt_LS (Aconst_null) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    42
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
	 pc+1 < max_pc \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    45
	 G \\<turnstile> (NT # ST , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    46
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    47
consts
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    48
 wt_MO	:: "[manipulate_object,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
primrec
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    50
"wt_MO (Getfield F C) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    51
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    52
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    53
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
	 is_class G C \\<and>
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
    55
	 (\\<exists>T oT ST'. field (G,C) F = Some(C,T) \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    56
                       ST = oT # ST' \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    57
		       G \\<turnstile> oT \\<preceq> (Class C) \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    58
		       G \\<turnstile> (T # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    59
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    60
"wt_MO (Putfield F C) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    61
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    62
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    63
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    64
	 is_class G C \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
	 (\\<exists>T vT oT ST'.
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
    66
             field (G,C) F = Some(C,T) \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
             ST = vT # oT # ST' \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    68
             G \\<turnstile> oT \\<preceq> (Class C) \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    69
	     G \\<turnstile> vT \\<preceq> T  \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    70
             G \\<turnstile> (ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    71
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    72
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    73
consts 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    74
 wt_CO	:: "[create_object,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    75
primrec
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    76
"wt_CO (New C) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    77
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    78
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    79
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
	 is_class G C \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    81
	 G \\<turnstile> ((Class C) # ST , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    82
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    83
consts
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    84
 wt_CH	:: "[check_object,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    85
primrec
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    86
"wt_CH (Checkcast C) G phi max_pc pc = 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    87
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    88
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    89
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    90
	 is_class G C \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    91
	 (\\<exists>rt ST'. ST = RefT rt # ST' \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    92
                   G \\<turnstile> (Class C # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    93
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    94
consts 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    95
 wt_OS	:: "[op_stack,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    96
primrec
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    97
"wt_OS Pop G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    98
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    99
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   100
	 \\<exists>ts ST'. pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   101
		ST = ts # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   102
		G \\<turnstile> (ST' , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   103
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   104
"wt_OS Dup G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   105
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   106
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   107
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   108
	 (\\<exists>ts ST'. ST = ts # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   109
		   G \\<turnstile> (ts # ts # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   110
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   111
"wt_OS Dup_x1 G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   112
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   113
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   114
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   115
	 (\\<exists>ts1 ts2 ST'. ST = ts1 # ts2 # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   116
		   G \\<turnstile> (ts1 # ts2 # ts1 # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   117
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   118
"wt_OS Dup_x2 G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   119
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   120
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   121
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   122
	 (\\<exists>ts1 ts2 ts3 ST'. ST = ts1 # ts2 # ts3 # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   123
		   G \\<turnstile> (ts1 # ts2 # ts3 # ts1 # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   124
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   125
"wt_OS Swap G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   126
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   127
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   128
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   129
	 (\\<exists>ts ts' ST'. ST = ts' # ts # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   130
		       G \\<turnstile> (ts # ts' # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   131
9260
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   132
"wt_OS ADD G phi max_pc pc =
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   133
	(let (ST,LT) = phi ! pc
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   134
	 in
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   135
	 pc+1 < max_pc \\<and>
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   136
	 (\\<exists>ST'. ST = (PrimT Integer) # (PrimT Integer) # ST' \\<and> 	 
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   137
		       G \\<turnstile> ((PrimT Integer) # ST' , LT) <=s phi ! (pc+1)))"
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   138
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   139
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   140
consts 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   141
 wt_BR	:: "[branch,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   142
primrec
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   143
"wt_BR (Ifcmpeq branch) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   144
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   145
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   146
	 pc+1 < max_pc \\<and> (nat(int pc+branch)) < max_pc \\<and> 
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   147
	 (\\<exists>ts ts' ST'. ST = ts # ts' # ST' \\<and>
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   148
          ((\\<exists>p. ts = PrimT p \\<and> ts' = PrimT p) \\<or>
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   149
           (\\<exists>r r'. ts = RefT r \\<and> ts' = RefT r')) \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   150
		       G \\<turnstile> (ST' , LT) <=s phi ! (pc+1) \\<and>
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   151
		       G \\<turnstile> (ST' , LT) <=s phi ! (nat(int pc+branch))))"
8200
700067a98634 Branch: top elements of stack only need to be convertible (not equal)
kleing
parents: 8048
diff changeset
   152
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   153
"wt_BR (Goto branch) G phi max_pc pc =
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   154
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   155
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   156
	 (nat(int pc+branch)) < max_pc \\<and> 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   157
	 G \\<turnstile> (ST , LT) <=s phi ! (nat(int pc+branch)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   158
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   159
consts
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   160
 wt_MI :: "[meth_inv,jvm_prog,method_type,p_count,p_count] \\<Rightarrow> bool" 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   161
primrec
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8023
diff changeset
   162
"wt_MI (Invoke mn fpTs) G phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   163
	(let (ST,LT) = phi ! pc
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   164
	 in         
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   165
         pc+1 < max_pc \\<and>
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   166
         (\\<exists>apTs X ST'. ST = (rev apTs) @ (X # ST') \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   167
         length apTs = length fpTs \\<and>
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   168
         (X = NT \\<or> (\\<exists>C. X = Class C \\<and>  
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   169
         (\\<forall>(aT,fT)\\<in>set(zip apTs fpTs). G \\<turnstile> aT \\<preceq> fT) \\<and>
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
   170
         (\\<exists>D rT b. method (G,C) (mn,fpTs) = Some(D,rT,b) \\<and>
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   171
         G \\<turnstile> (rT # ST' , LT) <=s phi ! (pc+1))))))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   172
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8023
diff changeset
   173
consts
1eaae1a2f8ff Minor mods.
nipkow
parents: 8023
diff changeset
   174
 wt_MR	:: "[meth_ret,jvm_prog,ty,method_type,p_count] \\<Rightarrow> bool"
1eaae1a2f8ff Minor mods.
nipkow
parents: 8023
diff changeset
   175
primrec
1eaae1a2f8ff Minor mods.
nipkow
parents: 8023
diff changeset
   176
  "wt_MR Return G rT phi pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   177
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   178
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   179
	 (\\<exists>T ST'. ST = T # ST' \\<and> G \\<turnstile> T \\<preceq> rT))"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   180
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   181
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   182
constdefs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   183
 wt_instr :: "[instr,jvm_prog,ty,method_type,nat,p_count] \\<Rightarrow> bool"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   184
 "wt_instr instr G rT phi max_pc pc \\<equiv>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   185
	case instr of
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   186
	  LS ins \\<Rightarrow> wt_LS ins G phi max_pc pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   187
	| CO  ins \\<Rightarrow> wt_CO ins G phi max_pc pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   188
	| MO  ins \\<Rightarrow> wt_MO ins G phi max_pc pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   189
	| CH  ins \\<Rightarrow> wt_CH ins G phi max_pc pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   190
	| MI  ins \\<Rightarrow> wt_MI ins G phi max_pc pc
8032
1eaae1a2f8ff Minor mods.
nipkow
parents: 8023
diff changeset
   191
	| MR  ins \\<Rightarrow> wt_MR ins G rT phi pc
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   192
	| OS  ins \\<Rightarrow> wt_OS ins G phi max_pc pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   193
	| BR  ins \\<Rightarrow> wt_BR ins G phi max_pc pc"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   194
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   195
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   196
constdefs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   197
 wt_start :: "[jvm_prog,cname,ty list,nat,method_type] \\<Rightarrow> bool"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   198
 "wt_start G C pTs mxl phi \\<equiv> 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   199
    G \\<turnstile> ([],(Some(Class C))#((map Some pTs))@(replicate mxl None)) <=s phi!0"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   200
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   201
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   202
 wt_method :: "[jvm_prog,cname,ty list,ty,nat,instr list,method_type] \\<Rightarrow> bool"
8048
b7f7e18eb584 Renamed some vars
nipkow
parents: 8034
diff changeset
   203
 "wt_method G C pTs rT mxl ins phi \\<equiv>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   204
	let max_pc = length ins
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   205
        in
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   206
	length ins < length phi \\<and> 0 < max_pc \\<and> wt_start G C pTs mxl phi \\<and> 
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   207
	(\\<forall>pc. pc<max_pc \\<longrightarrow> wt_instr (ins ! pc) G rT phi max_pc pc)"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   208
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   209
 wt_jvm_prog :: "[jvm_prog,prog_type] \\<Rightarrow> bool"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   210
"wt_jvm_prog G phi \\<equiv>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   211
   wf_prog (\\<lambda>G C (sig,rT,maxl,b).
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   212
              wt_method G C (snd sig) rT maxl b (phi C sig)) G"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   213
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   214
end