src/HOL/MicroJava/BV/JVMType.thy
author kleing
Thu, 21 Feb 2002 09:54:08 +0100
changeset 12911 704713ca07ea
parent 12516 d09d0f160888
child 13006 51c5f3f11d16
permissions -rw-r--r--
new document
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
     1
(*  Title:      HOL/MicroJava/BV/JVM.thy
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     2
    ID:         $Id$
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     3
    Author:     Gerwin Klein
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     4
    Copyright   2000 TUM
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     5
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     6
*)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     7
12911
704713ca07ea new document
kleing
parents: 12516
diff changeset
     8
header {* \isaheader{The JVM Type System as Semilattice} *}
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     9
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    10
theory JVMType = Opt + Product + Listn + JType:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    11
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    12
types
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    13
  locvars_type = "ty err list"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    14
  opstack_type = "ty list"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    15
  state_type   = "opstack_type \<times> locvars_type"
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
    16
  state        = "state_type option err"    -- "for Kildall"
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
    17
  method_type  = "state_type option list"   -- "for BVSpec"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    18
  class_type   = "sig => method_type"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    19
  prog_type    = "cname => class_type"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    20
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    21
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    22
constdefs
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    23
  stk_esl :: "'c prog => nat => ty list esl"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    24
  "stk_esl S maxs == upto_esl maxs (JType.esl S)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    25
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    26
  reg_sl :: "'c prog => nat => ty err list sl"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    27
  "reg_sl S maxr == Listn.sl maxr (Err.sl (JType.esl S))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    28
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    29
  sl :: "'c prog => nat => nat => state sl"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    30
  "sl S maxs maxr ==
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    31
  Err.sl(Opt.esl(Product.esl (stk_esl S maxs) (Err.esl(reg_sl S maxr))))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    32
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    33
constdefs
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    34
  states :: "'c prog => nat => nat => state set"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    35
  "states S maxs maxr == fst(sl S maxs maxr)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    36
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    37
  le :: "'c prog => nat => nat => state ord"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    38
  "le S maxs maxr == fst(snd(sl S maxs maxr))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    39
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    40
  sup :: "'c prog => nat => nat => state binop"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    41
  "sup S maxs maxr == snd(snd(sl S maxs maxr))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    42
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    43
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    44
constdefs
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    45
  sup_ty_opt :: "['code prog,ty err,ty err] => bool" 
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    46
                 ("_ |- _ <=o _" [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    47
  "sup_ty_opt G == Err.le (subtype G)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    48
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    49
  sup_loc :: "['code prog,locvars_type,locvars_type] => bool" 
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    50
              ("_ |- _ <=l _"  [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    51
  "sup_loc G == Listn.le (sup_ty_opt G)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    52
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
    53
  sup_state :: "['code prog,state_type,state_type] => bool"   
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    54
               ("_ |- _ <=s _"  [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    55
  "sup_state G == Product.le (Listn.le (subtype G)) (sup_loc G)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    56
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    57
  sup_state_opt :: "['code prog,state_type option,state_type option] => bool" 
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    58
                   ("_ |- _ <=' _"  [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    59
  "sup_state_opt G == Opt.le (sup_state G)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    60
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    61
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    62
syntax (xsymbols)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    63
  sup_ty_opt    :: "['code prog,ty err,ty err] => bool" 
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    64
                   ("_ \<turnstile> _ <=o _" [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    65
  sup_loc       :: "['code prog,locvars_type,locvars_type] => bool" 
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    66
                   ("_ \<turnstile> _ <=l _" [71,71] 70)
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
    67
  sup_state     :: "['code prog,state_type,state_type] => bool" 
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    68
                   ("_ \<turnstile> _ <=s _" [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    69
  sup_state_opt :: "['code prog,state_type option,state_type option] => bool"
11372
648795477bb5 corrected xsymbol/HTML syntax
oheimb
parents: 10812
diff changeset
    70
                   ("_ \<turnstile> _ <=' _" [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    71
                   
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    72
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    73
lemma JVM_states_unfold: 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    74
  "states S maxs maxr == err(opt((Union {list n (types S) |n. n <= maxs}) <*>
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    75
                                  list maxr (err(types S))))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    76
  apply (unfold states_def sl_def Opt.esl_def Err.sl_def
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    77
         stk_esl_def reg_sl_def Product.esl_def
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    78
         Listn.sl_def upto_esl_def JType.esl_def Err.esl_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    79
  by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    80
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    81
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    82
lemma JVM_le_unfold:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    83
 "le S m n == 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    84
  Err.le(Opt.le(Product.le(Listn.le(subtype S))(Listn.le(Err.le(subtype S)))))" 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    85
  apply (unfold le_def sl_def Opt.esl_def Err.sl_def
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    86
         stk_esl_def reg_sl_def Product.esl_def  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    87
         Listn.sl_def upto_esl_def JType.esl_def Err.esl_def) 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    88
  by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    89
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    90
lemma JVM_le_convert:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    91
  "le G m n (OK t1) (OK t2) = G \<turnstile> t1 <=' t2"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    92
  by (simp add: JVM_le_unfold Err.le_def lesub_def sup_state_opt_def 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    93
                sup_state_def sup_loc_def sup_ty_opt_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    94
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    95
lemma JVM_le_Err_conv:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    96
  "le G m n = Err.le (sup_state_opt G)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    97
  by (unfold sup_state_opt_def sup_state_def sup_loc_def  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    98
             sup_ty_opt_def JVM_le_unfold) simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    99
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   100
lemma zip_map [rule_format]:
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
   101
  "\<forall>a. length a = length b --> 
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
   102
  zip (map f a) (map g b) = map (\<lambda>(x,y). (f x, g y)) (zip a b)"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   103
  apply (induct b) 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   104
   apply simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   105
  apply clarsimp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   106
  apply (case_tac aa)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   107
  apply simp+
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   108
  done
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   109
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   110
lemma [simp]: "Err.le r (OK a) (OK b) = r a b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   111
  by (simp add: Err.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   112
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   113
lemma stk_convert:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   114
  "Listn.le (subtype G) a b = G \<turnstile> map OK a <=l map OK b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   115
proof 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   116
  assume "Listn.le (subtype G) a b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   117
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   118
  hence le: "list_all2 (subtype G) a b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   119
    by (unfold Listn.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   120
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   121
  { fix x' y'
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   122
    assume "length a = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   123
           "(x',y') \<in> set (zip (map OK a) (map OK b))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   124
    then
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   125
    obtain x y where OK:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   126
      "x' = OK x" "y' = OK y" "(x,y) \<in> set (zip a b)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   127
      by (auto simp add: zip_map)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   128
    with le
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   129
    have "subtype G x y"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   130
      by (simp add: list_all2_def Ball_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   131
    with OK
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   132
    have "G \<turnstile> x' <=o y'"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   133
      by (simp add: sup_ty_opt_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   134
  }
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   135
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   136
  with le
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   137
  show "G \<turnstile> map OK a <=l map OK b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   138
    by (unfold sup_loc_def Listn.le_def lesub_def list_all2_def) auto
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   139
next
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   140
  assume "G \<turnstile> map OK a <=l map OK b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   141
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   142
  thus "Listn.le (subtype G) a b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   143
    apply (unfold sup_loc_def list_all2_def Listn.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   144
    apply (clarsimp simp add: zip_map)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   145
    apply (drule bspec, assumption)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   146
    apply (auto simp add: sup_ty_opt_def subtype_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   147
    done
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   148
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   149
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   150
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   151
lemma sup_state_conv:
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
   152
  "(G \<turnstile> s1 <=s s2) == 
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
   153
  (G \<turnstile> map OK (fst s1) <=l map OK (fst s2)) \<and> (G \<turnstile> snd s1 <=l snd s2)"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   154
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def split_beta)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   155
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   156
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   157
lemma subtype_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   158
  "subtype G t t"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   159
  by (simp add: subtype_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   160
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   161
theorem sup_ty_opt_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   162
  "G \<turnstile> t <=o t"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   163
  by (simp add: sup_ty_opt_def Err.le_def lesub_def split: err.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   164
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   165
lemma le_list_refl2 [simp]: 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   166
  "(\<And>xs. r xs xs) \<Longrightarrow> Listn.le r xs xs"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   167
  by (induct xs, auto simp add: Listn.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   168
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   169
theorem sup_loc_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   170
  "G \<turnstile> t <=l t"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   171
  by (simp add: sup_loc_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   172
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   173
theorem sup_state_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   174
  "G \<turnstile> s <=s s"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   175
  by (auto simp add: sup_state_def Product.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   176
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   177
theorem sup_state_opt_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   178
  "G \<turnstile> s <=' s"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   179
  by (simp add: sup_state_opt_def Opt.le_def lesub_def split: option.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   180
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   181
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   182
theorem anyConvErr [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   183
  "(G \<turnstile> Err <=o any) = (any = Err)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   184
  by (simp add: sup_ty_opt_def Err.le_def split: err.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   185
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   186
theorem OKanyConvOK [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   187
  "(G \<turnstile> (OK ty') <=o (OK ty)) = (G \<turnstile> ty' \<preceq> ty)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   188
  by (simp add: sup_ty_opt_def Err.le_def lesub_def subtype_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   189
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   190
theorem sup_ty_opt_OK:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   191
  "G \<turnstile> a <=o (OK b) ==> \<exists> x. a = OK x"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   192
  by (clarsimp simp add: sup_ty_opt_def Err.le_def split: err.splits)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   193
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   194
lemma widen_PrimT_conv1 [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   195
  "[| G \<turnstile> S \<preceq> T; S = PrimT x|] ==> T = PrimT x"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   196
  by (auto elim: widen.elims)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   197
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   198
theorem sup_PTS_eq:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   199
  "(G \<turnstile> OK (PrimT p) <=o X) = (X=Err \<or> X = OK (PrimT p))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   200
  by (auto simp add: sup_ty_opt_def Err.le_def lesub_def subtype_def 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   201
              split: err.splits)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   202
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   203
theorem sup_loc_Nil [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   204
  "(G \<turnstile> [] <=l XT) = (XT=[])"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   205
  by (simp add: sup_loc_def Listn.le_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   206
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   207
theorem sup_loc_Cons [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   208
  "(G \<turnstile> (Y#YT) <=l XT) = (\<exists>X XT'. XT=X#XT' \<and> (G \<turnstile> Y <=o X) \<and> (G \<turnstile> YT <=l XT'))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   209
  by (simp add: sup_loc_def Listn.le_def lesub_def list_all2_Cons1)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   210
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   211
theorem sup_loc_Cons2:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   212
  "(G \<turnstile> YT <=l (X#XT)) = (\<exists>Y YT'. YT=Y#YT' \<and> (G \<turnstile> Y <=o X) \<and> (G \<turnstile> YT' <=l XT))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   213
  by (simp add: sup_loc_def Listn.le_def lesub_def list_all2_Cons2)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   214
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   215
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   216
theorem sup_loc_length:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   217
  "G \<turnstile> a <=l b ==> length a = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   218
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   219
  assume G: "G \<turnstile> a <=l b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   220
  have "\<forall>b. (G \<turnstile> a <=l b) --> length a = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   221
    by (induct a, auto)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   222
  with G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   223
  show ?thesis by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   224
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   225
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   226
theorem sup_loc_nth:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   227
  "[| G \<turnstile> a <=l b; n < length a |] ==> G \<turnstile> (a!n) <=o (b!n)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   228
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   229
  assume a: "G \<turnstile> a <=l b" "n < length a"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   230
  have "\<forall> n b. (G \<turnstile> a <=l b) --> n < length a --> (G \<turnstile> (a!n) <=o (b!n))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   231
    (is "?P a")
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   232
  proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   233
    show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   234
    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   235
    fix x xs assume IH: "?P xs"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   236
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   237
    show "?P (x#xs)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   238
    proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   239
      fix n b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   240
      assume "G \<turnstile> (x # xs) <=l b" "n < length (x # xs)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   241
      with IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   242
      show "G \<turnstile> ((x # xs) ! n) <=o (b ! n)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   243
        by - (cases n, auto)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   244
    qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   245
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   246
  with a
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   247
  show ?thesis by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   248
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   249
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   250
theorem all_nth_sup_loc:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   251
  "\<forall>b. length a = length b --> (\<forall> n. n < length a --> (G \<turnstile> (a!n) <=o (b!n))) 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   252
  --> (G \<turnstile> a <=l b)" (is "?P a")
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   253
proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   254
  show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   255
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   256
  fix l ls assume IH: "?P ls"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   257
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   258
  show "?P (l#ls)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   259
  proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   260
    fix b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   261
    assume f: "\<forall>n. n < length (l # ls) --> (G \<turnstile> ((l # ls) ! n) <=o (b ! n))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   262
    assume l: "length (l#ls) = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   263
    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   264
    then obtain b' bs where b: "b = b'#bs"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   265
      by - (cases b, simp, simp add: neq_Nil_conv, rule that)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   266
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   267
    with f
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   268
    have "\<forall>n. n < length ls --> (G \<turnstile> (ls!n) <=o (bs!n))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   269
      by auto
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   270
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   271
    with f b l IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   272
    show "G \<turnstile> (l # ls) <=l b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   273
      by auto
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   274
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   275
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   276
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   277
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   278
theorem sup_loc_append:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   279
  "length a = length b ==> 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   280
   (G \<turnstile> (a@x) <=l (b@y)) = ((G \<turnstile> a <=l b) \<and> (G \<turnstile> x <=l y))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   281
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   282
  assume l: "length a = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   283
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   284
  have "\<forall>b. length a = length b --> (G \<turnstile> (a@x) <=l (b@y)) = ((G \<turnstile> a <=l b) \<and> 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   285
            (G \<turnstile> x <=l y))" (is "?P a") 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   286
  proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   287
    show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   288
    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   289
    fix l ls assume IH: "?P ls"    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   290
    show "?P (l#ls)" 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   291
    proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   292
      fix b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   293
      assume "length (l#ls) = length (b::ty err list)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   294
      with IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   295
      show "(G \<turnstile> ((l#ls)@x) <=l (b@y)) = ((G \<turnstile> (l#ls) <=l b) \<and> (G \<turnstile> x <=l y))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   296
        by - (cases b, auto)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   297
    qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   298
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   299
  with l
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   300
  show ?thesis by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   301
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   302
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   303
theorem sup_loc_rev [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   304
  "(G \<turnstile> (rev a) <=l rev b) = (G \<turnstile> a <=l b)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   305
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   306
  have "\<forall>b. (G \<turnstile> (rev a) <=l rev b) = (G \<turnstile> a <=l b)" (is "\<forall>b. ?Q a b" is "?P a")
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   307
  proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   308
    show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   309
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   310
    fix l ls assume IH: "?P ls"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   311
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   312
    { 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   313
      fix b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   314
      have "?Q (l#ls) b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   315
      proof (cases (open) b)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   316
        case Nil
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   317
        thus ?thesis by (auto dest: sup_loc_length)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   318
      next
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   319
        case Cons 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   320
        show ?thesis
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   321
        proof
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   322
          assume "G \<turnstile> (l # ls) <=l b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   323
          thus "G \<turnstile> rev (l # ls) <=l rev b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   324
            by (clarsimp simp add: Cons IH sup_loc_length sup_loc_append)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   325
        next
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   326
          assume "G \<turnstile> rev (l # ls) <=l rev b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   327
          hence G: "G \<turnstile> (rev ls @ [l]) <=l (rev list @ [a])"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   328
            by (simp add: Cons)          
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   329
          
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   330
          hence "length (rev ls) = length (rev list)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   331
            by (auto dest: sup_loc_length)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   332
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   333
          from this G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   334
          obtain "G \<turnstile> rev ls <=l rev list" "G \<turnstile> l <=o a"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   335
            by (simp add: sup_loc_append)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   336
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   337
          thus "G \<turnstile> (l # ls) <=l b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   338
            by (simp add: Cons IH)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   339
        qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   340
      qed    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   341
    }
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   342
    thus "?P (l#ls)" by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   343
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   344
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   345
  thus ?thesis by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   346
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   347
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   348
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   349
theorem sup_loc_update [rule_format]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   350
  "\<forall> n y. (G \<turnstile> a <=o b) --> n < length y --> (G \<turnstile> x <=l y) --> 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   351
          (G \<turnstile> x[n := a] <=l y[n := b])" (is "?P x")
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   352
proof (induct x)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   353
  show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   354
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   355
  fix l ls assume IH: "?P ls"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   356
  show "?P (l#ls)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   357
  proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   358
    fix n y
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   359
    assume "G \<turnstile>a <=o b" "G \<turnstile> (l # ls) <=l y" "n < length y"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   360
    with IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   361
    show "G \<turnstile> (l # ls)[n := a] <=l y[n := b]"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   362
      by - (cases n, auto simp add: sup_loc_Cons2 list_all2_Cons1)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   363
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   364
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   365
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   366
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   367
theorem sup_state_length [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   368
  "G \<turnstile> s2 <=s s1 ==> 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   369
   length (fst s2) = length (fst s1) \<and> length (snd s2) = length (snd s1)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   370
  by (auto dest: sup_loc_length simp add: sup_state_def stk_convert lesub_def Product.le_def);
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   371
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   372
theorem sup_state_append_snd:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   373
  "length a = length b ==> 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   374
  (G \<turnstile> (i,a@x) <=s (j,b@y)) = ((G \<turnstile> (i,a) <=s (j,b)) \<and> (G \<turnstile> (i,x) <=s (j,y)))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   375
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def sup_loc_append)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   376
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   377
theorem sup_state_append_fst:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   378
  "length a = length b ==> 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   379
  (G \<turnstile> (a@x,i) <=s (b@y,j)) = ((G \<turnstile> (a,i) <=s (b,j)) \<and> (G \<turnstile> (x,i) <=s (y,j)))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   380
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def sup_loc_append)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   381
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   382
theorem sup_state_Cons1:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   383
  "(G \<turnstile> (x#xt, a) <=s (yt, b)) = 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   384
   (\<exists>y yt'. yt=y#yt' \<and> (G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt,a) <=s (yt',b)))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   385
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def map_eq_Cons)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   386
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   387
theorem sup_state_Cons2:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   388
  "(G \<turnstile> (xt, a) <=s (y#yt, b)) = 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   389
   (\<exists>x xt'. xt=x#xt' \<and> (G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt',a) <=s (yt,b)))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   390
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def map_eq_Cons sup_loc_Cons2)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   391
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   392
theorem sup_state_ignore_fst:  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   393
  "G \<turnstile> (a, x) <=s (b, y) ==> G \<turnstile> (c, x) <=s (c, y)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   394
  by (simp add: sup_state_def lesub_def Product.le_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   395
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   396
theorem sup_state_rev_fst:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   397
  "(G \<turnstile> (rev a, x) <=s (rev b, y)) = (G \<turnstile> (a, x) <=s (b, y))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   398
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   399
  have m: "!!f x. map f (rev x) = rev (map f x)" by (simp add: rev_map)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   400
  show ?thesis by (simp add: m sup_state_def stk_convert lesub_def Product.le_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   401
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   402
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   403
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   404
lemma sup_state_opt_None_any [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   405
  "(G \<turnstile> None <=' any) = True"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   406
  by (simp add: sup_state_opt_def Opt.le_def split: option.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   407
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   408
lemma sup_state_opt_any_None [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   409
  "(G \<turnstile> any <=' None) = (any = None)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   410
  by (simp add: sup_state_opt_def Opt.le_def split: option.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   411
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   412
lemma sup_state_opt_Some_Some [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   413
  "(G \<turnstile> (Some a) <=' (Some b)) = (G \<turnstile> a <=s b)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   414
  by (simp add: sup_state_opt_def Opt.le_def lesub_def del: split_paired_Ex)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   415
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   416
lemma sup_state_opt_any_Some [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   417
  "(G \<turnstile> (Some a) <=' any) = (\<exists>b. any = Some b \<and> G \<turnstile> a <=s b)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   418
  by (simp add: sup_state_opt_def Opt.le_def lesub_def split: option.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   419
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   420
lemma sup_state_opt_Some_any:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   421
  "(G \<turnstile> any <=' (Some b)) = (any = None \<or> (\<exists>a. any = Some a \<and> G \<turnstile> a <=s b))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   422
  by (simp add: sup_state_opt_def Opt.le_def lesub_def split: option.split)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   423
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   424
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   425
theorem sup_ty_opt_trans [trans]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   426
  "[|G \<turnstile> a <=o b; G \<turnstile> b <=o c|] ==> G \<turnstile> a <=o c"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   427
  by (auto intro: widen_trans 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   428
           simp add: sup_ty_opt_def Err.le_def lesub_def subtype_def 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   429
           split: err.splits)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   430
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   431
theorem sup_loc_trans [trans]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   432
  "[|G \<turnstile> a <=l b; G \<turnstile> b <=l c|] ==> G \<turnstile> a <=l c"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   433
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   434
  assume G: "G \<turnstile> a <=l b" "G \<turnstile> b <=l c"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   435
 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   436
  hence "\<forall> n. n < length a --> (G \<turnstile> (a!n) <=o (c!n))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   437
  proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   438
    fix n 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   439
    assume n: "n < length a"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   440
    with G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   441
    have "G \<turnstile> (a!n) <=o (b!n)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   442
      by - (rule sup_loc_nth)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   443
    also 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   444
    from n G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   445
    have "G \<turnstile> ... <=o (c!n)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   446
      by - (rule sup_loc_nth, auto dest: sup_loc_length)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   447
    finally
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   448
    show "G \<turnstile> (a!n) <=o (c!n)" .
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   449
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   450
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   451
  with G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   452
  show ?thesis 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   453
    by (auto intro!: all_nth_sup_loc [rule_format] dest!: sup_loc_length) 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   454
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   455
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   456
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   457
theorem sup_state_trans [trans]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   458
  "[|G \<turnstile> a <=s b; G \<turnstile> b <=s c|] ==> G \<turnstile> a <=s c"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   459
  by (auto intro: sup_loc_trans simp add: sup_state_def stk_convert Product.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   460
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   461
theorem sup_state_opt_trans [trans]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   462
  "[|G \<turnstile> a <=' b; G \<turnstile> b <=' c|] ==> G \<turnstile> a <=' c"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   463
  by (auto intro: sup_state_trans 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   464
           simp add: sup_state_opt_def Opt.le_def lesub_def 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   465
           split: option.splits)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   466
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   467
end