src/HOL/MicroJava/BV/BVSpec.thy
author wenzelm
Wed, 02 Aug 2000 19:40:14 +0200
changeset 9502 50ec59aff389
parent 9376 c32c5696ec2a
child 9549 40d64cb4f4e6
permissions -rw-r--r--
adapted deriv;
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
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    17
wt_instr :: "[instr,jvm_prog,ty,method_type,nat,p_count] \\<Rightarrow> bool"
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    18
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    19
primrec
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    20
"wt_instr (Load idx) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    21
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    22
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    23
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    24
	 idx < length LT \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    25
	 (\\<exists>ts. (LT ! idx) = Some ts \\<and> 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    26
	       G \\<turnstile> (ts # ST , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    27
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    28
"wt_instr (Store idx) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    29
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    30
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    31
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    32
	 idx < length LT \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    33
	 (\\<exists>ts ST'. ST = ts # ST' \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    34
		   G \\<turnstile> (ST' , LT[idx:=Some ts]) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    35
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    36
"wt_instr (Bipush i) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    37
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    38
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    39
	 pc+1 < max_pc \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    40
	 G \\<turnstile> ((PrimT Integer) # ST , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    41
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    42
"wt_instr (Aconst_null) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    43
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    44
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    45
	 pc+1 < max_pc \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    46
	 G \\<turnstile> (NT # ST , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    47
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    48
"wt_instr (Getfield F C) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    49
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    50
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    51
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    52
	 is_class G C \\<and>
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
    53
	 (\\<exists>T oT ST'. field (G,C) F = Some(C,T) \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    54
                       ST = oT # ST' \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    55
		       G \\<turnstile> oT \\<preceq> (Class C) \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    56
		       G \\<turnstile> (T # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    57
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    58
"wt_instr (Putfield F C) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    59
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    60
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    61
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    62
	 is_class G C \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    63
	 (\\<exists>T vT oT ST'.
8034
6fc37b5c5e98 Various little changes like cmethd -> method and cfield -> field.
nipkow
parents: 8032
diff changeset
    64
             field (G,C) F = Some(C,T) \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    65
             ST = vT # oT # ST' \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    66
             G \\<turnstile> oT \\<preceq> (Class C) \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    67
	     G \\<turnstile> vT \\<preceq> T  \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    68
             G \\<turnstile> (ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    69
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    70
"wt_instr (New C) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    71
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    72
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    73
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    74
	 is_class G C \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    75
	 G \\<turnstile> ((Class C) # ST , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    76
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    77
"wt_instr (Checkcast C) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    78
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    79
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    80
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    81
	 is_class G C \\<and> 
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    82
	 (\\<exists>rt ST'. ST = RefT rt # ST' \\<and>
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    83
                   G \\<turnstile> (Class C # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    84
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    85
"wt_instr Pop G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    86
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    87
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    88
	 \\<exists>ts ST'. pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    89
		ST = ts # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    90
		G \\<turnstile> (ST' , LT) <=s phi ! (pc+1))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    91
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    92
"wt_instr Dup G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    93
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    94
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    95
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    96
	 (\\<exists>ts ST'. ST = ts # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
    97
		   G \\<turnstile> (ts # ts # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
    98
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
    99
"wt_instr Dup_x1 G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   100
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   101
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   102
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   103
	 (\\<exists>ts1 ts2 ST'. ST = ts1 # ts2 # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   104
		   G \\<turnstile> (ts1 # ts2 # ts1 # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   105
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   106
"wt_instr Dup_x2 G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   107
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   108
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   109
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   110
	 (\\<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
   111
		   G \\<turnstile> (ts1 # ts2 # ts3 # ts1 # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   112
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   113
"wt_instr Swap G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   114
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   115
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   116
	 pc+1 < max_pc \\<and>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   117
	 (\\<exists>ts ts' ST'. ST = ts' # ts # ST' \\<and> 	 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   118
		       G \\<turnstile> (ts # ts' # ST' , LT) <=s phi ! (pc+1)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   119
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   120
"wt_instr IAdd G rT phi max_pc pc =
9260
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   121
	(let (ST,LT) = phi ! pc
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   122
	 in
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   123
	 pc+1 < max_pc \\<and>
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   124
	 (\\<exists>ST'. ST = (PrimT Integer) # (PrimT Integer) # ST' \\<and> 	 
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   125
		       G \\<turnstile> ((PrimT Integer) # ST' , LT) <=s phi ! (pc+1)))"
678e718a5a86 new ADD instruction
kleing
parents: 8386
diff changeset
   126
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   127
"wt_instr (Ifcmpeq branch) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   128
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   129
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   130
	 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
   131
	 (\\<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
   132
          ((\\<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
   133
           (\\<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
   134
		       G \\<turnstile> (ST' , LT) <=s phi ! (pc+1) \\<and>
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   135
		       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
   136
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   137
"wt_instr (Goto branch) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   138
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   139
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   140
	 (nat(int pc+branch)) < max_pc \\<and> 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   141
	 G \\<turnstile> (ST , LT) <=s phi ! (nat(int pc+branch)))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   142
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   143
"wt_instr (Invoke mn fpTs) G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   144
	(let (ST,LT) = phi ! pc
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   145
	 in         
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   146
         pc+1 < max_pc \\<and>
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   147
         (\\<exists>apTs X ST'. ST = (rev apTs) @ (X # ST') \\<and>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   148
         length apTs = length fpTs \\<and>
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   149
         (X = NT \\<or> (\\<exists>C. X = Class C \\<and>  
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   150
         (\\<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
   151
         (\\<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
   152
         G \\<turnstile> (rT # ST' , LT) <=s phi ! (pc+1))))))"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   153
9376
c32c5696ec2a flat instruction set
kleing
parents: 9271
diff changeset
   154
"wt_instr Return G rT phi max_pc pc =
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   155
	(let (ST,LT) = phi ! pc
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   156
	 in
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   157
	 (\\<exists>T ST'. ST = T # ST' \\<and> G \\<turnstile> T \\<preceq> rT))"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   158
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   159
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   160
constdefs
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   161
 wt_start :: "[jvm_prog,cname,ty list,nat,method_type] \\<Rightarrow> bool"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   162
 "wt_start G C pTs mxl phi \\<equiv> 
8023
3e5ddca613dd re-shaped and re-ordered conversion relations
oheimb
parents: 8011
diff changeset
   163
    G \\<turnstile> ([],(Some(Class C))#((map Some pTs))@(replicate mxl None)) <=s phi!0"
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   164
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   165
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   166
 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
   167
 "wt_method G C pTs rT mxl ins phi \\<equiv>
8011
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   168
	let max_pc = length ins
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   169
        in
8386
3e56677d3b98 minor adjustments in branch and method invocation for completeness of LBV
kleing
parents: 8200
diff changeset
   170
	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
   171
	(\\<forall>pc. pc<max_pc \\<longrightarrow> wt_instr (ins ! pc) G rT phi max_pc pc)"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   172
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   173
 wt_jvm_prog :: "[jvm_prog,prog_type] \\<Rightarrow> bool"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   174
"wt_jvm_prog G phi \\<equiv>
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   175
   wf_prog (\\<lambda>G C (sig,rT,maxl,b).
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   176
              wt_method G C (snd sig) rT maxl b (phi C sig)) G"
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   177
d14c4e9e9c8e *** empty log message ***
nipkow
parents:
diff changeset
   178
end