src/HOL/MicroJava/BV/JVMType.thy
author wenzelm
Sun, 27 Dec 2015 22:07:17 +0100
changeset 61943 7fba644ed827
parent 61361 8b5f00202e1a
child 61952 546958347e05
permissions -rw-r--r--
discontinued ASCII replacement syntax <*>;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42150
b0c0638c4aad tuned headers;
wenzelm
parents: 35417
diff changeset
     1
(*  Title:      HOL/MicroJava/BV/JVMType.thy
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     2
    Author:     Gerwin Klein
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     3
    Copyright   2000 TUM
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     4
*)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     5
61361
8b5f00202e1a isabelle update_cartouches;
wenzelm
parents: 58886
diff changeset
     6
section \<open>The JVM Type System as Semilattice\<close>
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
     7
33954
1bc3b688548c backported parts of abstract byte code verifier from AFP/Jinja
haftmann
parents: 25362
diff changeset
     8
theory JVMType
1bc3b688548c backported parts of abstract byte code verifier from AFP/Jinja
haftmann
parents: 25362
diff changeset
     9
imports JType
1bc3b688548c backported parts of abstract byte code verifier from AFP/Jinja
haftmann
parents: 25362
diff changeset
    10
begin
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    11
42463
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    12
type_synonym locvars_type = "ty err list"
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    13
type_synonym opstack_type = "ty list"
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    14
type_synonym state_type = "opstack_type \<times> locvars_type"
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    15
type_synonym state = "state_type option err"    -- "for Kildall"
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    16
type_synonym method_type = "state_type option list"   -- "for BVSpec"
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    17
type_synonym class_type = "sig \<Rightarrow> method_type"
f270e3e18be5 modernized specifications;
wenzelm
parents: 42150
diff changeset
    18
type_synonym prog_type = "cname \<Rightarrow> class_type"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    19
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    20
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    21
definition stk_esl :: "'c prog \<Rightarrow> nat \<Rightarrow> ty list esl" where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    22
  "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
    23
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    24
definition reg_sl :: "'c prog \<Rightarrow> nat \<Rightarrow> ty err list sl" where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    25
  "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
    26
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    27
definition sl :: "'c prog \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> state sl" where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    28
  "sl S maxs maxr ==
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    29
  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
    30
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    31
definition states :: "'c prog \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> state set" where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    32
  "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
    33
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    34
definition le :: "'c prog \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> state ord" where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    35
  "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
    36
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    37
definition  sup :: "'c prog \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> state binop" where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    38
  "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
    39
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    40
definition sup_ty_opt :: "['code prog,ty err,ty err] \<Rightarrow> bool"
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    41
                 ("_ |- _ <=o _" [71,71] 70) where 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    42
  "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
    43
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    44
definition sup_loc :: "['code prog,locvars_type,locvars_type] \<Rightarrow> bool" 
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    45
              ("_ |- _ <=l _"  [71,71] 70) where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    46
  "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
    47
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    48
definition sup_state :: "['code prog,state_type,state_type] \<Rightarrow> bool"   
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    49
               ("_ |- _ <=s _"  [71,71] 70) where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    50
  "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
    51
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    52
definition sup_state_opt :: "['code prog,state_type option,state_type option] \<Rightarrow> bool" 
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 33954
diff changeset
    53
                   ("_ |- _ <=' _"  [71,71] 70) where
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    54
  "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
    55
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    56
35355
613e133966ea modernized syntax declarations, and make them actually work with authentic syntax;
wenzelm
parents: 33954
diff changeset
    57
notation (xsymbols)
613e133966ea modernized syntax declarations, and make them actually work with authentic syntax;
wenzelm
parents: 33954
diff changeset
    58
  sup_ty_opt  ("_ \<turnstile> _ <=o _" [71,71] 70) and
613e133966ea modernized syntax declarations, and make them actually work with authentic syntax;
wenzelm
parents: 33954
diff changeset
    59
  sup_loc  ("_ \<turnstile> _ <=l _" [71,71] 70) and
613e133966ea modernized syntax declarations, and make them actually work with authentic syntax;
wenzelm
parents: 33954
diff changeset
    60
  sup_state  ("_ \<turnstile> _ <=s _" [71,71] 70) and
613e133966ea modernized syntax declarations, and make them actually work with authentic syntax;
wenzelm
parents: 33954
diff changeset
    61
  sup_state_opt  ("_ \<turnstile> _ <=' _" [71,71] 70)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    62
                   
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    63
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    64
lemma JVM_states_unfold: 
61943
7fba644ed827 discontinued ASCII replacement syntax <*>;
wenzelm
parents: 61361
diff changeset
    65
  "states S maxs maxr == err(opt((Union {list n (types S) |n. n <= maxs}) \<times>
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    66
                                  list maxr (err(types S))))"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    67
  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
    68
         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
    69
         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
    70
  by simp
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_le_unfold:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    74
 "le S m n == 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    75
  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
    76
  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
    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
lemma JVM_le_convert:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    82
  "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
    83
  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
    84
                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
    85
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    86
lemma JVM_le_Err_conv:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    87
  "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
    88
  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
    89
             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
    90
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    91
lemma zip_map [rule_format]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
    92
  "\<forall>a. length a = length b \<longrightarrow> 
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
    93
  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
    94
  apply (induct b) 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    95
   apply simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    96
  apply clarsimp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    97
  apply (case_tac aa)
52866
438f578ef1d9 tuned proofs;
wenzelm
parents: 47994
diff changeset
    98
  apply simp_all
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
    99
  done
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   100
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   101
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
   102
  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
   103
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   104
lemma stk_convert:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   105
  "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
   106
proof 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   107
  assume "Listn.le (subtype G) a b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   108
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   109
  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
   110
    by (unfold Listn.le_def lesub_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   111
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   112
  { fix x' y'
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   113
    assume "length a = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   114
           "(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
   115
    then
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   116
    obtain x y where OK:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   117
      "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
   118
      by (auto simp add: zip_map)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   119
    with le
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   120
    have "subtype G x y"
55524
f41ef840f09d folded 'list_all2' with the relator generated by 'datatype_new'
blanchet
parents: 52866
diff changeset
   121
      by (simp add: list_all2_iff Ball_def)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   122
    with OK
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   123
    have "G \<turnstile> x' <=o y'"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   124
      by (simp add: sup_ty_opt_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   125
  }
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   126
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   127
  with le
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   128
  show "G \<turnstile> map OK a <=l map OK b"
55524
f41ef840f09d folded 'list_all2' with the relator generated by 'datatype_new'
blanchet
parents: 52866
diff changeset
   129
    by (unfold sup_loc_def Listn.le_def lesub_def list_all2_iff) auto
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   130
next
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   131
  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
   132
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   133
  thus "Listn.le (subtype G) a b"
55524
f41ef840f09d folded 'list_all2' with the relator generated by 'datatype_new'
blanchet
parents: 52866
diff changeset
   134
    apply (unfold sup_loc_def list_all2_iff Listn.le_def lesub_def)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   135
    apply (clarsimp simp add: zip_map)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   136
    apply (drule bspec, assumption)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   137
    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
   138
    done
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   139
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   140
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
lemma sup_state_conv:
12516
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
   143
  "(G \<turnstile> s1 <=s s2) == 
d09d0f160888 exceptions
kleing
parents: 11372
diff changeset
   144
  (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
   145
  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
   146
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   147
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   148
lemma subtype_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   149
  "subtype G t t"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   150
  by (simp add: subtype_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   151
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   152
theorem sup_ty_opt_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   153
  "G \<turnstile> t <=o t"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   154
  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
   155
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   156
lemma le_list_refl2 [simp]: 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   157
  "(\<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
   158
  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
   159
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   160
theorem sup_loc_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   161
  "G \<turnstile> t <=l t"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   162
  by (simp add: sup_loc_def)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   163
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   164
theorem sup_state_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   165
  "G \<turnstile> s <=s s"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   166
  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
   167
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   168
theorem sup_state_opt_refl [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   169
  "G \<turnstile> s <=' s"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   170
  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
   171
  
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 anyConvErr [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   174
  "(G \<turnstile> Err <=o any) = (any = Err)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   175
  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
   176
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   177
theorem OKanyConvOK [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   178
  "(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
   179
  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
   180
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   181
theorem sup_ty_opt_OK:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   182
  "G \<turnstile> a <=o (OK b) \<Longrightarrow> \<exists> x. a = OK x"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   183
  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
   184
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   185
lemma widen_PrimT_conv1 [simp]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   186
  "\<lbrakk> G \<turnstile> S \<preceq> T; S = PrimT x\<rbrakk> \<Longrightarrow> T = PrimT x"
22271
51a80e238b29 Adapted to new inductive definition package.
berghofe
parents: 16417
diff changeset
   187
  by (auto elim: widen.cases)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   188
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   189
theorem sup_PTS_eq:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   190
  "(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
   191
  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
   192
              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
theorem sup_loc_Nil [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   195
  "(G \<turnstile> [] <=l XT) = (XT=[])"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   196
  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
   197
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   198
theorem sup_loc_Cons [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   199
  "(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
   200
  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
   201
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   202
theorem sup_loc_Cons2:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   203
  "(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
   204
  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
   205
13672
b95d12325b51 Added compiler
streckem
parents: 13006
diff changeset
   206
lemma sup_state_Cons:
b95d12325b51 Added compiler
streckem
parents: 13006
diff changeset
   207
  "(G \<turnstile> (x#xt, a) <=s (y#yt, b)) = 
b95d12325b51 Added compiler
streckem
parents: 13006
diff changeset
   208
   ((G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt,a) <=s (yt,b)))"
b95d12325b51 Added compiler
streckem
parents: 13006
diff changeset
   209
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def)
b95d12325b51 Added compiler
streckem
parents: 13006
diff changeset
   210
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   211
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   212
theorem sup_loc_length:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   213
  "G \<turnstile> a <=l b \<Longrightarrow> length a = length b"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   214
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   215
  assume G: "G \<turnstile> a <=l b"
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   216
  have "\<forall>b. (G \<turnstile> a <=l b) \<longrightarrow> length a = length b"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   217
    by (induct a, auto)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   218
  with G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   219
  show ?thesis by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   220
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   221
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   222
theorem sup_loc_nth:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   223
  "\<lbrakk> G \<turnstile> a <=l b; n < length a \<rbrakk> \<Longrightarrow> G \<turnstile> (a!n) <=o (b!n)"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   224
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   225
  assume a: "G \<turnstile> a <=l b" "n < length a"
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   226
  have "\<forall> n b. (G \<turnstile> a <=l b) \<longrightarrow> n < length a \<longrightarrow> (G \<turnstile> (a!n) <=o (b!n))"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   227
    (is "?P a")
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   228
  proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   229
    show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   230
    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   231
    fix x xs assume IH: "?P xs"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   232
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   233
    show "?P (x#xs)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   234
    proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   235
      fix n b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   236
      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
   237
      with IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   238
      show "G \<turnstile> ((x # xs) ! n) <=o (b ! n)"
47994
d7c0aa802f0d tuned proofs;
wenzelm
parents: 42463
diff changeset
   239
        by (cases n) auto
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   240
    qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   241
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   242
  with a
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   243
  show ?thesis by blast
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
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   246
theorem all_nth_sup_loc:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   247
  "\<forall>b. length a = length b \<longrightarrow> (\<forall> n. n < length a \<longrightarrow> (G \<turnstile> (a!n) <=o (b!n))) 
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   248
  \<longrightarrow> (G \<turnstile> a <=l b)" (is "?P a")
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   249
proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   250
  show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   251
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   252
  fix l ls assume IH: "?P ls"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   253
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   254
  show "?P (l#ls)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   255
  proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   256
    fix b
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   257
    assume f: "\<forall>n. n < length (l # ls) \<longrightarrow> (G \<turnstile> ((l # ls) ! n) <=o (b ! n))"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   258
    assume l: "length (l#ls) = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   259
    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   260
    then obtain b' bs where b: "b = b'#bs"
56073
29e308b56d23 enhanced simplifier solver for preconditions of rewrite rule, can now deal with conjunctions
nipkow
parents: 55524
diff changeset
   261
      by (cases b) (simp, simp add: neq_Nil_conv)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   262
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   263
    with f
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   264
    have "\<forall>n. n < length ls \<longrightarrow> (G \<turnstile> (ls!n) <=o (bs!n))"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   265
      by auto
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 b l IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   268
    show "G \<turnstile> (l # ls) <=l b"
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
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   271
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   272
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   273
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   274
theorem sup_loc_append:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   275
  "length a = length b \<Longrightarrow> 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   276
   (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
   277
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   278
  assume l: "length a = length b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   279
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   280
  have "\<forall>b. length a = length b \<longrightarrow> (G \<turnstile> (a@x) <=l (b@y)) = ((G \<turnstile> a <=l b) \<and> 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   281
            (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
   282
  proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   283
    show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   284
    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   285
    fix l ls assume IH: "?P ls"    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   286
    show "?P (l#ls)" 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   287
    proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   288
      fix b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   289
      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
   290
      with IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   291
      show "(G \<turnstile> ((l#ls)@x) <=l (b@y)) = ((G \<turnstile> (l#ls) <=l b) \<and> (G \<turnstile> x <=l y))"
47994
d7c0aa802f0d tuned proofs;
wenzelm
parents: 42463
diff changeset
   292
        by (cases b) auto
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   293
    qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   294
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   295
  with l
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   296
  show ?thesis by blast
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
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   299
theorem sup_loc_rev [simp]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   300
  "(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
   301
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   302
  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
   303
  proof (induct a)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   304
    show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   305
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   306
    fix l ls assume IH: "?P ls"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   307
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   308
    { 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   309
      fix b
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   310
      have "?Q (l#ls) b"
25362
8d06e11a01d1 tuned proofs -- avoid open cases;
wenzelm
parents: 22271
diff changeset
   311
      proof (cases b)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   312
        case Nil
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   313
        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
   314
      next
25362
8d06e11a01d1 tuned proofs -- avoid open cases;
wenzelm
parents: 22271
diff changeset
   315
        case (Cons a list)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   316
        show ?thesis
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   317
        proof
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   318
          assume "G \<turnstile> (l # ls) <=l b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   319
          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
   320
            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
   321
        next
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   322
          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
   323
          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
   324
            by (simp add: Cons)          
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   325
          
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   326
          hence "length (rev ls) = length (rev list)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   327
            by (auto dest: sup_loc_length)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   328
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   329
          from this G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   330
          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
   331
            by (simp add: sup_loc_append)
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
          thus "G \<turnstile> (l # ls) <=l b"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   334
            by (simp add: Cons IH)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   335
        qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   336
      qed    
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   337
    }
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   338
    thus "?P (l#ls)" by blast
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
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   341
  thus ?thesis by blast
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   342
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   343
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
theorem sup_loc_update [rule_format]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   346
  "\<forall> n y. (G \<turnstile> a <=o b) \<longrightarrow> n < length y \<longrightarrow> (G \<turnstile> x <=l y) \<longrightarrow> 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   347
          (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
   348
proof (induct x)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   349
  show "?P []" by simp
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   350
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   351
  fix l ls assume IH: "?P ls"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   352
  show "?P (l#ls)"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   353
  proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   354
    fix n y
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   355
    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
   356
    with IH
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   357
    show "G \<turnstile> (l # ls)[n := a] <=l y[n := b]"
47994
d7c0aa802f0d tuned proofs;
wenzelm
parents: 42463
diff changeset
   358
      by (cases n) (auto simp add: sup_loc_Cons2 list_all2_Cons1)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   359
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   360
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   361
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   362
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   363
theorem sup_state_length [simp]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   364
  "G \<turnstile> s2 <=s s1 \<Longrightarrow> 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   365
   length (fst s2) = length (fst s1) \<and> length (snd s2) = length (snd s1)"
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 56073
diff changeset
   366
  by (auto dest: sup_loc_length simp add: sup_state_def stk_convert lesub_def Product.le_def)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   367
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   368
theorem sup_state_append_snd:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   369
  "length a = length b \<Longrightarrow> 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   370
  (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
   371
  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
   372
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   373
theorem sup_state_append_fst:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   374
  "length a = length b \<Longrightarrow> 
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   375
  (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
   376
  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
   377
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   378
theorem sup_state_Cons1:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   379
  "(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
   380
   (\<exists>y yt'. yt=y#yt' \<and> (G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt,a) <=s (yt',b)))"
14025
d9b155757dc8 *** empty log message ***
nipkow
parents: 13672
diff changeset
   381
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   382
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   383
theorem sup_state_Cons2:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   384
  "(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
   385
   (\<exists>x xt'. xt=x#xt' \<and> (G \<turnstile> x \<preceq> y) \<and> (G \<turnstile> (xt',a) <=s (yt,b)))"
14025
d9b155757dc8 *** empty log message ***
nipkow
parents: 13672
diff changeset
   386
  by (auto simp add: sup_state_def stk_convert lesub_def Product.le_def sup_loc_Cons2)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   387
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   388
theorem sup_state_ignore_fst:  
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   389
  "G \<turnstile> (a, x) <=s (b, y) \<Longrightarrow> G \<turnstile> (c, x) <=s (c, y)"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   390
  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
   391
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   392
theorem sup_state_rev_fst:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   393
  "(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
   394
proof -
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   395
  have m: "\<And>f x. map f (rev x) = rev (map f x)" by (simp add: rev_map)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   396
  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
   397
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   398
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   399
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   400
lemma sup_state_opt_None_any [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   401
  "(G \<turnstile> None <=' any) = True"
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   402
  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
   403
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   404
lemma sup_state_opt_any_None [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   405
  "(G \<turnstile> any <=' None) = (any = None)"
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_Some_Some [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   409
  "(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
   410
  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
   411
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   412
lemma sup_state_opt_any_Some [iff]:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   413
  "(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
   414
  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
   415
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   416
lemma sup_state_opt_Some_any:
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   417
  "(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
   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
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   421
theorem sup_ty_opt_trans [trans]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   422
  "\<lbrakk>G \<turnstile> a <=o b; G \<turnstile> b <=o c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=o c"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   423
  by (auto intro: widen_trans 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   424
           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
   425
           split: err.splits)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   426
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   427
theorem sup_loc_trans [trans]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   428
  "\<lbrakk>G \<turnstile> a <=l b; G \<turnstile> b <=l c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=l c"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   429
proof -
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   430
  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
   431
 
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   432
  hence "\<forall> n. n < length a \<longrightarrow> (G \<turnstile> (a!n) <=o (c!n))"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   433
  proof (intro strip)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   434
    fix n 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   435
    assume n: "n < length a"
47994
d7c0aa802f0d tuned proofs;
wenzelm
parents: 42463
diff changeset
   436
    with G(1)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   437
    have "G \<turnstile> (a!n) <=o (b!n)"
47994
d7c0aa802f0d tuned proofs;
wenzelm
parents: 42463
diff changeset
   438
      by (rule sup_loc_nth)
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   439
    also 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   440
    from n G
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   441
    have "G \<turnstile> \<dots> <=o (c!n)"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   442
      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
   443
    finally
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   444
    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
   445
  qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   446
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   447
  with G
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   448
  show ?thesis 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   449
    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
   450
qed
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   451
  
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   452
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   453
theorem sup_state_trans [trans]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   454
  "\<lbrakk>G \<turnstile> a <=s b; G \<turnstile> b <=s c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=s c"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   455
  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
   456
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   457
theorem sup_state_opt_trans [trans]:
13006
51c5f3f11d16 symbolized
kleing
parents: 12911
diff changeset
   458
  "\<lbrakk>G \<turnstile> a <=' b; G \<turnstile> b <=' c\<rbrakk> \<Longrightarrow> G \<turnstile> a <=' c"
10812
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   459
  by (auto intro: sup_state_trans 
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   460
           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
   461
           split: option.splits)
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   462
ead84e90bfeb merged semilattice orders with <=' from Convert.thy (now defined in JVMType.thy)
kleing
parents:
diff changeset
   463
end