src/HOL/MicroJava/Comp/CorrCompTp.thy
author wenzelm
Sat, 02 Jan 2016 18:48:45 +0100
changeset 62042 6c6ccf573479
parent 61361 8b5f00202e1a
child 62390 842917225d56
permissions -rw-r--r--
isabelle update_cartouches -c -t;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/Comp/CorrCompTp.thy
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
     2
    Author:     Martin Strecker
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
     3
*)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
     4
15481
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15236
diff changeset
     5
theory CorrCompTp
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15236
diff changeset
     6
imports LemmasComp TypeInf "../BV/JVM" "../BV/Altern"
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15236
diff changeset
     7
begin
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
     8
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
     9
declare split_paired_All [simp del]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    10
declare split_paired_Ex [simp del]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    11
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    12
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    13
(**********************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    14
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
    15
definition inited_LT :: "[cname, ty list, (vname \<times> ty) list] \<Rightarrow> locvars_type" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    16
  "inited_LT C pTs lvars == (OK (Class C))#((map OK pTs))@(map (Fun.comp OK snd) lvars)"
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
    17
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
    18
definition is_inited_LT :: "[cname, ty list, (vname \<times> ty) list, locvars_type] \<Rightarrow> bool" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    19
  "is_inited_LT C pTs lvars LT == (LT = (inited_LT C pTs lvars))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    20
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
    21
definition local_env :: "[java_mb prog, cname, sig, vname list,(vname \<times> ty) list] \<Rightarrow> java_mb env" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    22
  "local_env G C S pns lvars == 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    23
     let (mn, pTs) = S in (G,map_of lvars(pns[\<mapsto>]pTs)(This\<mapsto>Class C))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    24
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    25
lemma local_env_fst [simp]: "fst (local_env G C S pns lvars) = G"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    26
  by (simp add: local_env_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    27
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    28
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    29
lemma wt_class_expr_is_class:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    30
  "\<lbrakk> ws_prog G; E \<turnstile> expr :: Class cname; E = local_env G C (mn, pTs) pns lvars\<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    31
  \<Longrightarrow> is_class G cname "
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    32
  apply (subgoal_tac "((fst E), (snd E)) \<turnstile> expr :: Class cname")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    33
   apply (frule ty_expr_is_type)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    34
    apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    35
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    36
  apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    37
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    38
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    39
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    40
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    41
(********************************************************************************)
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 58263
diff changeset
    42
subsection "index"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    43
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    44
lemma local_env_snd:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    45
  "snd (local_env G C (mn, pTs) pns lvars) = map_of lvars(pns[\<mapsto>]pTs)(This\<mapsto>Class C)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    46
  by (simp add: local_env_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    47
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    48
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    49
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    50
lemma index_in_bounds:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    51
  "length pns = length pTs \<Longrightarrow>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    52
  snd (local_env G C (mn, pTs) pns lvars) vname = Some T
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    53
       \<Longrightarrow> index (pns, lvars, blk, res) vname < length (inited_LT C pTs lvars)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    54
  apply (simp add: local_env_snd index_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    55
  apply (case_tac "vname = This")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    56
   apply (simp add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    57
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    58
  apply (drule map_of_upds_SomeD)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    59
  apply (drule length_takeWhile)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    60
  apply (simp add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    61
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    62
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    63
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    64
lemma map_upds_append: 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    65
  "length k1s = length x1s \<Longrightarrow> m(k1s[\<mapsto>]x1s)(k2s[\<mapsto>]x2s) = m ((k1s@k2s)[\<mapsto>](x1s@x2s))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    66
  apply (induct k1s arbitrary: x1s m)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    67
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    68
  apply (subgoal_tac "\<exists>x xr. x1s = x # xr")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    69
   apply clarsimp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    70
  (* subgoal *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    71
  apply (case_tac x1s)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    72
   apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    73
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    74
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    75
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    76
lemma map_of_append: 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    77
  "map_of ((rev xs) @ ys) = (map_of ys) ((map fst xs) [\<mapsto>] (map snd xs))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    78
  apply (induct xs arbitrary: ys)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    79
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    80
  apply (rename_tac a xs ys)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    81
  apply (drule_tac x="a # ys" in meta_spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    82
  apply (simp only: rev.simps append_assoc append_Cons append_Nil
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    83
                    list.map map_of.simps map_upds_Cons list.sel)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    84
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    85
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    86
lemma map_of_as_map_upds: "map_of (rev xs) = empty ((map fst xs) [\<mapsto>] (map snd xs))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    87
  by (rule map_of_append [of _ "[]", simplified])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    88
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
    89
lemma map_of_rev: "unique xs \<Longrightarrow> map_of (rev xs) = map_of xs"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    90
  apply (induct xs)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    91
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    92
  apply (simp add: unique_def map_of_append map_of_as_map_upds [symmetric]
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    93
                   Map.map_of_append[symmetric] del:Map.map_of_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    94
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    95
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    96
lemma map_upds_rev:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    97
  "\<lbrakk> distinct ks; length ks = length xs \<rbrakk> \<Longrightarrow> m (rev ks [\<mapsto>] rev xs) = m (ks [\<mapsto>] xs)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    98
  apply (induct ks arbitrary: xs)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
    99
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   100
  apply (subgoal_tac "\<exists>x xr. xs = x # xr")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   101
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   102
   apply (drule_tac x=xr in meta_spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   103
   apply (simp add: map_upds_append [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   104
  apply (case_tac xs, auto)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   105
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   106
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   107
lemma map_upds_takeWhile [rule_format]:
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   108
  "\<forall>ks. (empty(rev ks[\<mapsto>]rev xs)) k = Some x \<longrightarrow> length ks = length xs \<longrightarrow>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   109
    xs ! length (takeWhile (\<lambda>z. z \<noteq> k) ks) = x"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   110
  apply (induct xs)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   111
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   112
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   113
  apply (subgoal_tac "\<exists>k' kr. ks = k' # kr")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   114
   apply (clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   115
   apply (drule_tac x=kr in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   116
   apply (simp only: rev.simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   117
   apply (subgoal_tac "(empty(rev kr @ [k'][\<mapsto>]rev xs @ [a])) = empty (rev kr[\<mapsto>]rev xs)([k'][\<mapsto>][a])")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   118
    apply (simp split:split_if_asm)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   119
   apply (simp add: map_upds_append [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   120
  apply (case_tac ks)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   121
   apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   122
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   123
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   124
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   125
lemma local_env_inited_LT:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   126
  "\<lbrakk> snd (local_env G C (mn, pTs) pns lvars) vname = Some T;
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   127
  length pns = length pTs; distinct pns; unique lvars \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   128
  \<Longrightarrow> (inited_LT C pTs lvars ! index (pns, lvars, blk, res) vname) = OK T"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   129
  apply (simp add: local_env_snd index_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   130
  apply (case_tac "vname = This")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   131
   apply (simp add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   132
  apply (simp add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   133
  apply (simp (no_asm_simp) only: map_map [symmetric] map_append [symmetric] list.map [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   134
  apply (subgoal_tac "length (takeWhile (\<lambda>z. z \<noteq> vname) (pns @ map fst lvars)) < length (pTs @ map snd lvars)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   135
   apply (simp (no_asm_simp) only: List.nth_map ok_val.simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   136
   apply (subgoal_tac "map_of lvars = map_of (map (\<lambda> p. (fst p, snd p)) lvars)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   137
    apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   138
    apply (subgoal_tac "distinct (map fst lvars)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   139
     apply (frule_tac g=snd in AuxLemmas.map_of_map_as_map_upd)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   140
     apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   141
     apply (simp add: map_upds_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   142
     apply (frule map_upds_SomeD)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   143
     apply (rule map_upds_takeWhile)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   144
      apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   145
      apply (simp add: map_upds_append [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   146
      apply (simp add: map_upds_rev)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   147
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   148
     (* show length (pns @ map fst lvars) = length (pTs @ map snd lvars) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   149
     apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   150
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   151
    (* show distinct (map fst lvars) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   152
    apply (simp only: unique_def Fun.comp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   153
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   154
   (* show map_of lvars = map_of (map (\<lambda>p. (fst p, snd p)) lvars) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   155
   apply simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   156
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   157
  (* show length (takeWhile (\<lambda>z. z \<noteq> vname) (pns @ map fst lvars)) < length (pTs @ map snd lvars) *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   158
  apply (drule map_of_upds_SomeD)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   159
  apply (drule length_takeWhile)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   160
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   161
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   162
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   163
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   164
lemma inited_LT_at_index_no_err:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   165
  "i < length (inited_LT C pTs lvars) \<Longrightarrow> inited_LT C pTs lvars ! i \<noteq> Err"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   166
  apply (simp only: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   167
  apply (simp only: map_map [symmetric] map_append [symmetric] list.map [symmetric] length_map)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   168
  apply (simp only: nth_map)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   169
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   170
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   171
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   172
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   173
lemma sup_loc_update_index: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   174
  \<lbrakk> G \<turnstile> T \<preceq> T'; is_type G T'; length pns = length pTs; distinct pns; unique lvars;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   175
  snd (local_env G C (mn, pTs) pns lvars) vname = Some T' \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   176
  \<Longrightarrow> 
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   177
  comp G \<turnstile> inited_LT C pTs lvars [index (pns, lvars, blk, res) vname := OK T] <=l 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   178
           inited_LT C pTs lvars"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   179
  apply (subgoal_tac " index (pns, lvars, blk, res) vname < length (inited_LT C pTs lvars)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   180
   apply (frule_tac blk=blk and res=res in local_env_inited_LT, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   181
   apply (rule sup_loc_trans)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   182
    apply (rule_tac b="OK T'" in sup_loc_update)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   183
      apply (simp add: comp_widen)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   184
     apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   185
    apply (rule sup_loc_refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   186
   apply (simp add: list_update_same_conv [THEN iffD2])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   187
  (* subgoal *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   188
  apply (rule index_in_bounds)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   189
   apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   190
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   191
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   192
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   193
(********************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   194
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 58263
diff changeset
   195
subsection "Preservation of ST and LT by compTpExpr / compTpStmt"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   196
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   197
lemma sttp_of_comb_nil [simp]: "sttp_of (comb_nil sttp) = sttp"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   198
  by (simp add: comb_nil_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   199
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   200
lemma mt_of_comb_nil [simp]: "mt_of (comb_nil sttp) = []"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   201
  by (simp add: comb_nil_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   202
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   203
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   204
lemma sttp_of_comb [simp]: "sttp_of ((f1 \<box> f2) sttp) = sttp_of (f2 (sttp_of (f1 sttp)))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   205
  apply (case_tac "f1 sttp")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   206
  apply (case_tac "(f2 (sttp_of (f1 sttp)))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   207
  apply (simp add: comb_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   208
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   209
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   210
lemma mt_of_comb: "(mt_of ((f1 \<box> f2) sttp)) = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   211
  (mt_of (f1 sttp)) @ (mt_of (f2 (sttp_of (f1 sttp))))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   212
  by (simp add: comb_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   213
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   214
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   215
lemma mt_of_comb_length [simp]: "\<lbrakk> n1 = length (mt_of (f1 sttp)); n1 \<le> n \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   216
  \<Longrightarrow> (mt_of ((f1 \<box> f2) sttp) ! n) = (mt_of (f2 (sttp_of (f1 sttp))) ! (n - n1))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   217
  by (simp add: comb_def nth_append split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   218
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   219
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   220
lemma compTpExpr_Exprs_LT_ST: "
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   221
  \<lbrakk>jmb = (pns, lvars, blk, res);
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   222
  wf_prog wf_java_mdecl G;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   223
  wf_java_mdecl G C ((mn, pTs), rT, jmb);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   224
  E = local_env G C (mn, pTs) pns lvars \<rbrakk>
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   225
  \<Longrightarrow>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   226
  (\<forall> ST LT T.
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   227
  E \<turnstile> ex :: T \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   228
  is_inited_LT C pTs lvars LT \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   229
  sttp_of (compTpExpr jmb G ex (ST, LT)) = (T # ST, LT))
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   230
  \<and>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   231
  (\<forall> ST LT Ts.
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   232
  E \<turnstile> exs [::] Ts \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   233
  is_inited_LT C pTs lvars LT \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   234
  sttp_of (compTpExprs jmb G exs (ST, LT)) = ((rev Ts) @ ST, LT))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   235
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   236
  apply (rule compat_expr_expr_list.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   237
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   238
            (* expresssions *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   239
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   240
            (* NewC *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   241
            apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   242
            apply (drule NewC_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   243
            apply (simp add: pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   244
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   245
           (* Cast *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   246
           apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   247
           apply (drule Cast_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   248
           apply ((drule_tac x=ST in spec), (drule spec)+, (drule mp, assumption)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   249
           apply (simp add: replST_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   250
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   251
          (* Lit *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   252
          apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   253
          apply (drule Lit_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   254
          apply (simp add: pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   255
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   256
         (* BinOp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   257
         apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   258
         apply (drule BinOp_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   259
         apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   260
         apply (drule_tac x="Ta # ST" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   261
         apply ((drule spec)+, (drule mp, assumption)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   262
         apply (rename_tac binop x2 x3 ST LT T Ta, case_tac binop)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   263
          apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   264
          apply (simp (no_asm_simp) add: popST_def pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   265
         apply (simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   266
         apply (simp (no_asm_simp) add: replST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   267
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   268
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   269
        (* LAcc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   270
        apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   271
        apply (drule LAcc_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   272
        apply (simp add: pushST_def is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   273
        apply (simp add: wf_prog_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   274
        apply (frule wf_java_mdecl_disjoint_varnames)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   275
        apply (simp add: disjoint_varnames_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   276
        apply (frule wf_java_mdecl_length_pTs_pns)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   277
        apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   278
        apply (simp (no_asm_simp) add: local_env_inited_LT)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   279
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   280
       (* LAss *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   281
       apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   282
       apply (drule LAss_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   283
       apply (drule LAcc_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   284
       apply ((drule_tac x=ST in spec), (drule spec)+, (drule mp, assumption)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   285
       apply (simp add: popST_def dupST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   286
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   287
      (* FAcc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   288
      apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   289
      apply (drule FAcc_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   290
      apply ((drule_tac x=ST in spec), (drule spec)+, (drule mp, assumption)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   291
      apply (simp add: replST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   292
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   293
      (* show   snd (the (field (G, cname) vname)) = T *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   294
      apply (subgoal_tac "is_class G Ca")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   295
       apply (rename_tac cname x2 vname ST LT T Ca, subgoal_tac "is_class G cname \<and> field (G, cname) vname = Some (cname, T)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   296
        apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   297
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   298
       (* show is_class G cname \<and> field (G, cname) vname = Some (cname, T) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   299
       apply (rule field_in_fd) apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   300
      (* show is_class G Ca *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   301
      apply (fast intro: wt_class_expr_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   302
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   303
     (* FAss *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   304
     apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   305
     apply (drule FAss_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   306
     apply (drule FAcc_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   307
     apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   308
     apply (drule_tac x="Class Ca # ST" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   309
     apply ((drule spec)+, (drule mp, assumption)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   310
     apply (simp add: popST_def dup_x1ST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   311
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   312
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   313
    (* Call *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   314
    apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   315
    apply (drule Call_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   316
    apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   317
    apply (rename_tac cname x2 x3 x4 x5 ST LT T pTsa md, drule_tac x="Class cname # ST" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   318
    apply ((drule spec)+, (drule mp, assumption)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   319
    apply (simp add: replST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   320
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   321
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   322
   (* expression lists *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   323
   (* nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   324
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   325
   apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   326
   apply (drule Nil_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   327
   apply (simp add: comb_nil_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   328
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   329
  (* cons *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   330
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   331
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   332
  apply (drule Cons_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   333
  apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   334
  apply (drule_tac x="T # ST" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   335
  apply ((drule spec)+, (drule mp, assumption)+)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   336
  apply simp
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   337
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   338
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   339
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   340
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   341
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   342
lemmas compTpExpr_LT_ST [rule_format (no_asm)] = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   343
  compTpExpr_Exprs_LT_ST [THEN conjunct1]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   344
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   345
lemmas compTpExprs_LT_ST [rule_format (no_asm)] = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   346
  compTpExpr_Exprs_LT_ST [THEN conjunct2]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   347
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   348
lemma compTpStmt_LT_ST [rule_format (no_asm)]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   349
  \<lbrakk> jmb = (pns,lvars,blk,res); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   350
  wf_prog wf_java_mdecl G;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   351
  wf_java_mdecl G C ((mn, pTs), rT, jmb);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   352
  E = (local_env G C (mn, pTs) pns lvars)\<rbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   353
\<Longrightarrow> (\<forall> ST LT.
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   354
  E \<turnstile> s\<surd> \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   355
  (is_inited_LT C pTs lvars LT)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   356
\<longrightarrow> sttp_of (compTpStmt jmb G s (ST, LT)) = (ST, LT))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   357
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   358
  apply (rule stmt.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   359
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   360
      (* Skip *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   361
      apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   362
      apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   363
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   364
     (* Expr *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   365
     apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   366
     apply (drule Expr_invers, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   367
     apply (simp (no_asm_simp) add: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   368
     apply (frule_tac ST=ST in compTpExpr_LT_ST, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   369
     apply (simp add: popST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   370
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   371
    (* Comp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   372
    apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   373
    apply (drule Comp_invers, clarify)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   374
    apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   375
    apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   376
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   377
   (* Cond *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   378
   apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   379
   apply (drule Cond_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   380
   apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   381
   apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   382
   apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   383
   apply (drule spec)+ apply (drule mp, assumption)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   384
   apply (drule_tac ST="PrimT Boolean # ST" in compTpExpr_LT_ST, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   385
   apply (simp add: popST_def pushST_def nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   386
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   387
  (* Loop *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   388
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   389
  apply (drule Loop_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   390
  apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   391
  apply (drule_tac x=ST in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   392
  apply (drule spec)+ apply (drule mp, assumption)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   393
  apply (drule_tac ST="PrimT Boolean # ST" in compTpExpr_LT_ST, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   394
  apply (simp add: popST_def pushST_def nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   395
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   396
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   397
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   398
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   399
lemma compTpInit_LT_ST: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   400
  sttp_of (compTpInit jmb (vn,ty) (ST, LT)) = (ST, LT[(index jmb vn):= OK ty])"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   401
  by (simp add: compTpInit_def storeST_def pushST_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   402
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   403
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   404
lemma compTpInitLvars_LT_ST_aux [rule_format (no_asm)]:
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   405
  "\<forall> pre lvars_pre lvars0.
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   406
  jmb = (pns,lvars0,blk,res) \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   407
  lvars0 = (lvars_pre @ lvars) \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   408
  (length pns) + (length lvars_pre) + 1 = length pre \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   409
  disjoint_varnames pns (lvars_pre @ lvars)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   410
  \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   411
sttp_of (compTpInitLvars jmb lvars (ST, pre @ replicate (length lvars) Err))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   412
    = (ST, pre @ map (Fun.comp OK snd) lvars)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   413
  apply (induct lvars)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   414
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   415
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   416
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   417
  apply (subgoal_tac "\<exists>vn ty. a = (vn, ty)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   418
   prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   419
   apply (simp (no_asm_simp))
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   420
  apply ((erule exE)+, simp (no_asm_simp))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   421
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   422
  apply (drule_tac x="pre @ [OK ty]" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   423
  apply (drule_tac x="lvars_pre @ [a]" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   424
  apply (drule_tac x="lvars0" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   425
  apply (simp add: compTpInit_LT_ST index_of_var2)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   426
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   427
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   428
lemma compTpInitLvars_LT_ST: 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   429
  "\<lbrakk> jmb = (pns, lvars, blk, res); wf_java_mdecl G C ((mn, pTs), rT, jmb) \<rbrakk>
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   430
  \<Longrightarrow> sttp_of (compTpInitLvars jmb lvars (ST, start_LT C pTs (length lvars)))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   431
      = (ST, inited_LT C pTs lvars)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   432
  apply (simp add: start_LT_def inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   433
  apply (simp only: append_Cons [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   434
  apply (rule compTpInitLvars_LT_ST_aux)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   435
  apply (auto dest: wf_java_mdecl_length_pTs_pns wf_java_mdecl_disjoint_varnames)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   436
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   437
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   438
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   439
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   440
(********************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   441
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   442
lemma max_of_list_elem: "x \<in> set xs \<Longrightarrow> x \<le> (max_of_list xs)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   443
  by (induct xs, auto intro: max.cobounded1 simp: le_max_iff_disj max_of_list_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   444
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   445
lemma max_of_list_sublist: "set xs \<subseteq> set ys 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   446
  \<Longrightarrow> (max_of_list xs) \<le> (max_of_list ys)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   447
  by (induct xs, auto dest: max_of_list_elem simp: max_of_list_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   448
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   449
lemma max_of_list_append [simp]:
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   450
  "max_of_list (xs @ ys) = max (max_of_list xs) (max_of_list ys)" 
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   451
  apply (simp add: max_of_list_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   452
  apply (induct xs)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   453
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   454
  using [[linarith_split_limit = 0]]
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   455
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   456
  apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   457
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   458
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   459
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   460
lemma app_mono_mxs: "\<lbrakk> app i G mxs rT pc et s; mxs \<le> mxs' \<rbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   461
  \<Longrightarrow> app i G mxs' rT pc et s"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   462
  apply (case_tac s)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   463
   apply (simp add: app_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   464
  apply (case_tac i, auto intro: less_trans)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   465
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   466
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   467
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   468
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   469
lemma err_mono [simp]: "A \<subseteq> B \<Longrightarrow> err A \<subseteq> err B"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   470
  by (auto simp: err_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   471
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   472
lemma opt_mono [simp]: "A \<subseteq> B \<Longrightarrow> opt A \<subseteq> opt B"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   473
  by (auto simp: opt_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   474
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   475
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   476
lemma states_mono: "\<lbrakk> mxs \<le> mxs' \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   477
  \<Longrightarrow> states G mxs mxr \<subseteq> states G mxs' mxr"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   478
  apply (simp add: states_def JVMType.sl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   479
  apply (simp add: Product.esl_def stk_esl_def reg_sl_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   480
                   upto_esl_def Listn.sl_def Err.sl_def  JType.esl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   481
  apply (simp add: Err.esl_def Err.le_def Listn.le_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   482
  apply (simp add: Product.le_def Product.sup_def Err.sup_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   483
  apply (simp add: Opt.esl_def Listn.sup_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   484
  apply (rule err_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   485
  apply (rule opt_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   486
  apply (rule Sigma_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   487
   apply (rule Union_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   488
   apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   489
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   490
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   491
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   492
lemma check_type_mono:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   493
  "\<lbrakk> check_type G mxs mxr s; mxs \<le> mxs' \<rbrakk> \<Longrightarrow> check_type G mxs' mxr s"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   494
  apply (simp add: check_type_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   495
  apply (frule_tac G=G and mxr=mxr in states_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   496
  apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   497
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   498
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   499
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   500
(* wt is preserved when adding instructions/state-types at the end *)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   501
lemma wt_instr_prefix: "
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   502
  \<lbrakk> wt_instr_altern (bc ! pc) cG rT mt mxs mxr max_pc et pc; 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   503
    bc' = bc @ bc_post; mt' = mt @ mt_post; 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   504
    mxs \<le> mxs'; max_pc \<le> max_pc'; 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   505
    pc < length bc; pc < length mt; 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   506
    max_pc = (length mt)\<rbrakk>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   507
  \<Longrightarrow> wt_instr_altern (bc' ! pc) cG rT mt' mxs' mxr max_pc' et pc"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   508
  apply (simp add: wt_instr_altern_def nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   509
  apply (auto intro: app_mono_mxs check_type_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   510
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   511
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   512
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   513
(************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   514
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   515
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   516
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   517
lemma pc_succs_shift:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   518
  "pc'\<in>set (succs i (pc'' + n)) \<Longrightarrow> ((pc' - n) \<in>set (succs i pc''))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   519
  apply (induct i, simp_all)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   520
  apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   521
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   522
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   523
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   524
lemma pc_succs_le:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   525
  "\<lbrakk> pc' \<in> set (succs i (pc'' + n));   
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   526
     \<forall>b. ((i = (Goto b) \<or> i=(Ifcmpeq b)) \<longrightarrow> 0 \<le> (int pc'' + b)) \<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   527
  \<Longrightarrow> n \<le> pc'"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   528
  apply (induct i, simp_all)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   529
  apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   530
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   531
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   532
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   533
(**********************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   534
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   535
definition offset_xcentry :: "[nat, exception_entry] \<Rightarrow> exception_entry" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   536
  "offset_xcentry == 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   537
      \<lambda> n (start_pc, end_pc, handler_pc, catch_type).
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   538
          (start_pc + n, end_pc + n, handler_pc + n, catch_type)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   539
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   540
definition offset_xctable :: "[nat, exception_table] \<Rightarrow> exception_table" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   541
  "offset_xctable n == (map (offset_xcentry n))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   542
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   543
lemma match_xcentry_offset [simp]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   544
  match_exception_entry G cn (pc + n) (offset_xcentry n ee) = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   545
  match_exception_entry G cn pc ee"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   546
  by (simp add: match_exception_entry_def offset_xcentry_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   547
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   548
lemma match_xctable_offset: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   549
  (match_exception_table G cn (pc + n) (offset_xctable n et)) =
55466
786edc984c98 merged 'Option.map' and 'Option.map_option'
blanchet
parents: 55465
diff changeset
   550
  (map_option (\<lambda> pc'. pc' + n) (match_exception_table G cn pc et))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   551
  apply (induct et)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   552
   apply (simp add: offset_xctable_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   553
  apply (case_tac "match_exception_entry G cn pc a")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   554
   apply (simp add: offset_xcentry_def split_beta)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   555
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   556
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   557
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   558
lemma match_offset [simp]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   559
  match G cn (pc + n) (offset_xctable n et) = match G cn pc et"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   560
  apply (induct et)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   561
   apply (simp add: offset_xctable_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   562
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   563
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   564
lemma match_any_offset [simp]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   565
  match_any G (pc + n) (offset_xctable n et) = match_any G pc et"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   566
  apply (induct et)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   567
   apply (simp add: offset_xctable_def offset_xcentry_def split_beta)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   568
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   569
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   570
lemma app_mono_pc: "\<lbrakk> app i G mxs rT pc et s; pc'= pc + n \<rbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   571
  \<Longrightarrow> app i G mxs rT pc' (offset_xctable n et) s"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   572
  apply (case_tac s)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   573
   apply (simp add: app_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   574
  apply (case_tac i, auto)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   575
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   576
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   577
(**********************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   578
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   579
  (* Currently: empty exception_table *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   580
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   581
abbreviation (input)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   582
  empty_et :: exception_table
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   583
  where "empty_et == []"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   584
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   585
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   586
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   587
  (* move into Effect.thy *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   588
lemma xcpt_names_Nil [simp]: "(xcpt_names (i, G, pc, [])) = []"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   589
  by (induct i, simp_all)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   590
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   591
lemma xcpt_eff_Nil [simp]: "(xcpt_eff i G pc s []) = []"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   592
  by (simp add: xcpt_eff_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   593
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   594
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   595
lemma app_jumps_lem: "\<lbrakk> app i cG mxs rT pc empty_et s; s=(Some st) \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   596
  \<Longrightarrow>  \<forall> b. ((i = (Goto b) \<or> i=(Ifcmpeq b)) \<longrightarrow> 0 \<le> (int pc + b))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   597
  by (induct i) auto
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   598
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   599
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   600
(* wt is preserved when adding instructions/state-types to the front *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   601
lemma wt_instr_offset: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   602
 \<lbrakk> \<forall> pc'' < length mt. 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   603
    wt_instr_altern ((bc@bc_post) ! pc'') cG rT (mt@mt_post) mxs mxr max_pc empty_et pc''; 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   604
  bc' = bc_pre @ bc @ bc_post; mt' = mt_pre @ mt @ mt_post; 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   605
  length bc_pre = length mt_pre; length bc = length mt;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   606
  length mt_pre \<le> pc; pc < length (mt_pre @ mt); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   607
  mxs \<le> mxs'; max_pc + length mt_pre \<le> max_pc' \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   608
\<Longrightarrow> wt_instr_altern (bc' ! pc) cG rT mt' mxs' mxr max_pc' empty_et pc"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   609
  apply (simp add: wt_instr_altern_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   610
  apply (subgoal_tac "\<exists> pc''. pc = pc'' + length mt_pre", erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   611
   prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   612
   apply (rule_tac x="pc - length mt_pre" in exI, arith)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   613
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   614
  apply (drule_tac x=pc'' in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   615
  apply (drule mp) 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   616
   apply arith    (* show pc'' < length mt *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   617
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   618
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   619
  apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   620
   (* app *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   621
   apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   622
   apply (rule app_mono_mxs)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   623
    apply (frule app_mono_pc)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   624
     apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   625
    apply (simp add: offset_xctable_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   626
   apply assumption+
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   627
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   628
  (* check_type *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   629
  apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   630
   apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   631
   apply (rule  check_type_mono)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   632
    apply assumption+
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   633
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   634
  (* ..eff.. *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   635
  apply (intro ballI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   636
  apply (subgoal_tac "\<exists> pc' s'. x = (pc', s')", (erule exE)+, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   637
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   638
   apply (case_tac s')
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   639
    (* s' = None *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   640
    apply (simp add: eff_def nth_append norm_eff_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   641
    apply (frule_tac x="(pc', None)" and  f=fst and b=pc' in rev_image_eqI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   642
     apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   643
    apply (simp add: image_comp Fun.comp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   644
    apply (frule pc_succs_shift)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   645
    apply (drule bspec, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   646
    apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   647
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   648
   (* s' = Some a *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   649
   apply (drule_tac x="(pc' - length mt_pre, s')" in bspec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   650
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   651
    (* show  (pc' - length mt_pre, s') \<in> set (eff \<dots>) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   652
    apply (simp add: eff_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   653
    (* norm_eff *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   654
    apply (clarsimp simp: nth_append pc_succs_shift)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   655
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   656
   (* show P x of bspec *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   657
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   658
   apply (subgoal_tac "length mt_pre \<le> pc'")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   659
    apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   660
    apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   661
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   662
   (* subgoals *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   663
   apply (simp add: eff_def xcpt_eff_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   664
   apply (clarsimp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   665
   apply (rule pc_succs_le,  assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   666
   apply (subgoal_tac "\<exists> st. mt ! pc'' = Some st", erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   667
    apply (rule_tac s="Some st" and st=st and cG=cG and mxs=mxs and rT=rT in app_jumps_lem)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   668
     apply (simp add: nth_append)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   669
   (* subgoal \<exists> st. mt ! pc'' = Some st *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   670
   apply (simp add: norm_eff_def map_option_case nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   671
   apply (case_tac "mt ! pc''")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   672
    apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   673
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   674
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   675
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   676
(**********************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   677
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   678
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   679
definition start_sttp_resp_cons :: "[state_type \<Rightarrow> method_type \<times> state_type] \<Rightarrow> bool" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   680
  "start_sttp_resp_cons f == 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   681
     (\<forall> sttp. let (mt', sttp') = (f sttp) in (\<exists>mt'_rest. mt' = Some sttp # mt'_rest))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   682
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   683
definition start_sttp_resp :: "[state_type \<Rightarrow> method_type \<times> state_type] \<Rightarrow> bool" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   684
  "start_sttp_resp f == (f = comb_nil) \<or> (start_sttp_resp_cons f)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   685
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   686
lemma start_sttp_resp_comb_nil [simp]: "start_sttp_resp comb_nil"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   687
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   688
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   689
lemma start_sttp_resp_cons_comb_cons [simp]: "start_sttp_resp_cons f 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   690
  \<Longrightarrow> start_sttp_resp_cons (f \<box> f')"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   691
  apply (simp add: start_sttp_resp_cons_def comb_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   692
  apply (rule allI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   693
  apply (drule_tac x=sttp in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   694
  apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   695
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   696
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   697
lemma start_sttp_resp_cons_comb_cons_r: "\<lbrakk> start_sttp_resp f; start_sttp_resp_cons f'\<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   698
  \<Longrightarrow> start_sttp_resp_cons (f \<box> f')"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   699
  by (auto simp: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   700
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   701
lemma start_sttp_resp_cons_comb [simp]: "start_sttp_resp_cons f 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   702
  \<Longrightarrow> start_sttp_resp (f \<box> f')"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   703
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   704
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   705
lemma start_sttp_resp_comb: "\<lbrakk> start_sttp_resp f; start_sttp_resp f' \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   706
  \<Longrightarrow> start_sttp_resp (f \<box> f')"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   707
  by (auto simp: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   708
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   709
lemma start_sttp_resp_cons_nochangeST [simp]: "start_sttp_resp_cons nochangeST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   710
  by (simp add: start_sttp_resp_cons_def nochangeST_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   711
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   712
lemma start_sttp_resp_cons_pushST [simp]: "start_sttp_resp_cons (pushST Ts)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   713
  by (simp add: start_sttp_resp_cons_def pushST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   714
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   715
lemma start_sttp_resp_cons_dupST [simp]: "start_sttp_resp_cons dupST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   716
  by (simp add: start_sttp_resp_cons_def dupST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   717
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   718
lemma start_sttp_resp_cons_dup_x1ST [simp]: "start_sttp_resp_cons dup_x1ST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   719
  by (simp add: start_sttp_resp_cons_def dup_x1ST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   720
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   721
lemma start_sttp_resp_cons_popST [simp]: "start_sttp_resp_cons (popST n)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   722
  by (simp add: start_sttp_resp_cons_def popST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   723
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   724
lemma start_sttp_resp_cons_replST [simp]: "start_sttp_resp_cons (replST n tp)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   725
  by (simp add: start_sttp_resp_cons_def replST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   726
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   727
lemma start_sttp_resp_cons_storeST [simp]: "start_sttp_resp_cons (storeST i tp)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   728
  by (simp add: start_sttp_resp_cons_def storeST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   729
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   730
lemma start_sttp_resp_cons_compTpExpr [simp]: "start_sttp_resp_cons (compTpExpr jmb G ex)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   731
  apply (induct ex)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   732
          apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   733
      apply (simp add: start_sttp_resp_cons_def comb_def pushST_def split_beta) (* LAcc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   734
     apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   735
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   736
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   737
lemma start_sttp_resp_cons_compTpInit [simp]: "start_sttp_resp_cons (compTpInit jmb lv)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   738
  by (simp add: compTpInit_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   739
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   740
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   741
lemma start_sttp_resp_nochangeST [simp]: "start_sttp_resp nochangeST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   742
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   743
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   744
lemma start_sttp_resp_pushST [simp]: "start_sttp_resp (pushST Ts)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   745
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   746
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   747
lemma start_sttp_resp_dupST [simp]: "start_sttp_resp dupST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   748
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   749
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   750
lemma start_sttp_resp_dup_x1ST [simp]: "start_sttp_resp dup_x1ST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   751
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   752
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   753
lemma start_sttp_resp_popST [simp]: "start_sttp_resp (popST n)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   754
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   755
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   756
lemma start_sttp_resp_replST [simp]: "start_sttp_resp (replST n tp)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   757
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   758
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   759
lemma start_sttp_resp_storeST [simp]: "start_sttp_resp (storeST i tp)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   760
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   761
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   762
lemma start_sttp_resp_compTpExpr [simp]: "start_sttp_resp (compTpExpr jmb G ex)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   763
  by (simp add: start_sttp_resp_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   764
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   765
lemma start_sttp_resp_compTpExprs [simp]: "start_sttp_resp (compTpExprs jmb G exs)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   766
  by (induct exs, (simp add: start_sttp_resp_comb)+)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   767
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   768
lemma start_sttp_resp_compTpStmt [simp]: "start_sttp_resp (compTpStmt jmb G s)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   769
  by (induct s, (simp add: start_sttp_resp_comb)+)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   770
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   771
lemma start_sttp_resp_compTpInitLvars [simp]: "start_sttp_resp (compTpInitLvars jmb lvars)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   772
  by (induct lvars, simp+)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   773
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   774
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   775
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   776
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   777
  (* ********************************************************************** *)
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 58263
diff changeset
   778
subsection "length of compExpr/ compTpExprs"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   779
  (* ********************************************************************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   780
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   781
lemma length_comb [simp]:  "length (mt_of ((f1 \<box> f2) sttp)) = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   782
  length (mt_of (f1 sttp)) + length (mt_of (f2 (sttp_of (f1 sttp))))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   783
  by (simp add: comb_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   784
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   785
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   786
lemma length_comb_nil [simp]: "length (mt_of (comb_nil sttp)) = 0"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   787
  by (simp add: comb_nil_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   788
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   789
lemma length_nochangeST [simp]: "length (mt_of (nochangeST sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   790
  by (simp add: nochangeST_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   791
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   792
lemma length_pushST [simp]: "length (mt_of (pushST Ts sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   793
  by (simp add: pushST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   794
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   795
lemma length_dupST [simp]: "length (mt_of (dupST sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   796
  by (simp add: dupST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   797
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   798
lemma length_dup_x1ST [simp]: "length (mt_of (dup_x1ST sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   799
  by (simp add: dup_x1ST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   800
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   801
lemma length_popST [simp]: "length (mt_of (popST n sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   802
  by (simp add: popST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   803
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   804
lemma length_replST [simp]: "length (mt_of (replST n tp sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   805
  by (simp add: replST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   806
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   807
lemma length_storeST [simp]: "length (mt_of (storeST i tp sttp)) = 1"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   808
  by (simp add: storeST_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   809
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   810
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   811
lemma length_compTpExpr_Exprs [rule_format]: "
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   812
  (\<forall>sttp. (length (mt_of (compTpExpr jmb G ex sttp)) = length (compExpr jmb ex)))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   813
  \<and> (\<forall>sttp. (length (mt_of (compTpExprs jmb G exs sttp)) = length (compExprs jmb exs)))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   814
  apply (rule compat_expr_expr_list.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   815
            apply (simp_all)[3]
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   816
         apply (rename_tac binop a b, case_tac binop)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   817
          apply (auto simp add: pushST_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   818
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   819
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   820
lemma length_compTpExpr: "length (mt_of (compTpExpr jmb G ex sttp)) = length (compExpr jmb ex)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   821
  by (rule length_compTpExpr_Exprs [THEN conjunct1 [THEN spec]])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   822
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   823
lemma length_compTpExprs: "length (mt_of (compTpExprs jmb G exs sttp)) = length (compExprs jmb exs)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   824
  by (rule length_compTpExpr_Exprs [THEN conjunct2 [THEN spec]])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   825
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   826
lemma length_compTpStmt [rule_format]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   827
  (\<forall> sttp. (length (mt_of (compTpStmt jmb G s sttp)) = length (compStmt jmb s)))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   828
  by (rule stmt.induct) (auto simp: length_compTpExpr)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   829
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   830
lemma length_compTpInit: "length (mt_of (compTpInit jmb lv sttp)) = length (compInit jmb lv)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   831
  by (simp add: compTpInit_def compInit_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   832
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   833
lemma length_compTpInitLvars [rule_format]: 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   834
  "\<forall> sttp. length (mt_of (compTpInitLvars jmb lvars sttp)) = length (compInitLvars jmb lvars)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   835
  by (induct lvars, (simp add: compInitLvars_def length_compTpInit split_beta)+)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   836
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   837
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   838
  (* ********************************************************************** *)
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 58263
diff changeset
   839
subsection "Correspondence bytecode - method types"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   840
  (* ********************************************************************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   841
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   842
abbreviation (input)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   843
  ST_of :: "state_type \<Rightarrow> opstack_type"
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   844
  where "ST_of == fst"
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   845
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   846
abbreviation (input)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   847
  LT_of :: "state_type \<Rightarrow> locvars_type"
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 33954
diff changeset
   848
  where "LT_of == snd"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   849
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   850
lemma states_lower:
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   851
  "\<lbrakk> OK (Some (ST, LT)) \<in> states cG mxs mxr; length ST \<le> mxs\<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   852
  \<Longrightarrow> OK (Some (ST, LT)) \<in> states cG (length ST) mxr"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   853
  apply (simp add: states_def JVMType.sl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   854
  apply (simp add: Product.esl_def stk_esl_def reg_sl_def upto_esl_def Listn.sl_def Err.sl_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   855
                   JType.esl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   856
  apply (simp add: Err.esl_def Err.le_def Listn.le_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   857
  apply (simp add: Product.le_def Product.sup_def Err.sup_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   858
  apply (simp add: Opt.esl_def Listn.sup_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   859
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   860
  apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   861
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   862
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   863
lemma check_type_lower:
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   864
  "\<lbrakk> check_type cG mxs mxr (OK (Some (ST, LT))); length ST \<le> mxs\<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   865
  \<Longrightarrow>check_type cG (length ST) mxr (OK (Some (ST, LT)))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   866
  by (simp add: check_type_def states_lower)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   867
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   868
  (* ******************************************************************* *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   869
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   870
definition bc_mt_corresp :: "
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   871
  [bytecode, state_type \<Rightarrow> method_type \<times> state_type, state_type, jvm_prog, ty, nat, p_count]
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   872
  \<Rightarrow> bool" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   873
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   874
  "bc_mt_corresp bc f sttp0 cG rT mxr idx ==
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   875
  let (mt, sttp) = f sttp0 in
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   876
  (length bc = length mt \<and> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   877
    ((check_type cG (length (ST_of sttp0)) mxr (OK (Some sttp0))) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   878
    (\<forall>  mxs. 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   879
     mxs = max_ssize (mt@[Some sttp]) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   880
     (\<forall> pc. pc < idx \<longrightarrow> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   881
      wt_instr_altern (bc ! pc) cG rT (mt@[Some sttp]) mxs mxr (length mt + 1) empty_et pc)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   882
     \<and> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   883
     check_type cG mxs mxr (OK ((mt@[Some sttp]) ! idx)))))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   884
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   885
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   886
lemma bc_mt_corresp_comb: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   887
  \<lbrakk> bc' = (bc1@bc2); l' = (length bc');
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   888
  bc_mt_corresp bc1 f1 sttp0 cG rT mxr (length bc1);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   889
  bc_mt_corresp bc2 f2 (sttp_of (f1 sttp0)) cG rT mxr (length bc2);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   890
  start_sttp_resp f2\<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   891
\<Longrightarrow> bc_mt_corresp bc' (f1 \<box> f2) sttp0 cG rT mxr l'"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   892
  apply (subgoal_tac "\<exists>mt1 sttp1. (f1 sttp0) = (mt1, sttp1)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   893
   apply (subgoal_tac "\<exists>mt2 sttp2. (f2 sttp1) = (mt2, sttp2)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   894
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   895
    (* unfold start_sttp_resp and make case distinction *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   896
    apply (simp only: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   897
    apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   898
     (* case f2 = comb_nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   899
     apply (simp add: bc_mt_corresp_def comb_nil_def start_sttp_resp_cons_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   900
     apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   901
     apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   902
     apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   903
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   904
    (* case start_sttp_resp_cons f2 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   905
    apply (simp add: bc_mt_corresp_def comb_def start_sttp_resp_cons_def del: all_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   906
    apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   907
    apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   908
    apply (drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   909
    apply (subgoal_tac "check_type cG (length (fst sttp1)) mxr (OK (Some sttp1))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   910
     apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   911
     apply (drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   912
     apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   913
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   914
     apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   915
      (* show wt_instr  \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   916
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   917
      apply (drule_tac x=sttp1 in spec, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   918
      apply (erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   919
      apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   920
      apply (case_tac "pc < length mt1")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   921
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   922
       (* case pc < length mt1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   923
       apply (drule spec, drule mp, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   924
       apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   925
       apply (rule_tac mt="mt1 @ [Some sttp1]" in wt_instr_prefix)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   926
              apply assumption+ apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   927
            apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   928
           apply (simp (no_asm_simp) add: max_ssize_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   929
           apply (simp add: max_of_list_def ac_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   930
          apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   931
         apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   932
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   933
      (* case pc \<ge> length mt1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   934
      apply (rule_tac bc=bc2 and mt=mt2 and bc_post="[]" and mt_post="[Some sttp2]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   935
              and mxr=mxr
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   936
              in wt_instr_offset)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   937
              apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   938
             apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   939
        apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   940
       apply (simp add: max_ssize_def) apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   941
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   942
     (* show check_type \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   943
     apply (subgoal_tac "((mt2 @ [Some sttp2]) ! length bc2) = Some sttp2")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   944
      apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   945
      apply (rule check_type_mono) apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   946
      apply (simp (no_asm_simp) add: max_ssize_def ac_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   947
     apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   948
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   949
    apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   950
    apply (case_tac sttp1)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   951
    apply (simp add: check_type_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   952
    apply (rule states_lower, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   953
    apply (simp (no_asm_simp) add: max_ssize_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   954
    apply (simp (no_asm_simp) add: max_of_list_def ssize_sto_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   955
   apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   956
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   957
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   958
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   959
lemma bc_mt_corresp_zero [simp]:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   960
  "\<lbrakk> length (mt_of (f sttp)) = length bc; start_sttp_resp f\<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   961
  \<Longrightarrow> bc_mt_corresp bc f sttp cG rT mxr 0"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   962
  apply (simp add: bc_mt_corresp_def start_sttp_resp_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   963
  apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   964
   apply (simp add: max_ssize_def max_of_list_def ssize_sto_def split: prod.split)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   965
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   966
  apply (simp add: start_sttp_resp_cons_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   967
  apply (drule_tac x=sttp in spec, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   968
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   969
  apply (rule check_type_mono, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   970
  apply (simp add: max_ssize_def max_of_list_def ssize_sto_def split: prod.split)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   971
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   972
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   973
  (* ********************************************************************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   974
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   975
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
   976
definition mt_sttp_flatten :: "method_type \<times> state_type \<Rightarrow> method_type" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   977
  "mt_sttp_flatten mt_sttp == (mt_of mt_sttp) @ [Some (sttp_of mt_sttp)]"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   978
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   979
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   980
lemma mt_sttp_flatten_length [simp]: "n = (length (mt_of (f sttp)))
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   981
  \<Longrightarrow> (mt_sttp_flatten (f sttp)) ! n = Some (sttp_of (f sttp))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   982
  by (simp add: mt_sttp_flatten_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   983
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   984
lemma mt_sttp_flatten_comb: "(mt_sttp_flatten ((f1 \<box> f2) sttp)) = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   985
  (mt_of (f1 sttp)) @ (mt_sttp_flatten (f2 (sttp_of (f1 sttp))))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   986
  by (simp add: mt_sttp_flatten_def comb_def split_beta)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   987
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   988
lemma mt_sttp_flatten_comb_length [simp]: "\<lbrakk> n1 = length (mt_of (f1 sttp)); n1 \<le> n \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
   989
  \<Longrightarrow> (mt_sttp_flatten ((f1 \<box> f2) sttp) ! n) = (mt_sttp_flatten (f2 (sttp_of (f1 sttp))) ! (n - n1))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   990
  by (simp add: mt_sttp_flatten_comb nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   991
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   992
lemma mt_sttp_flatten_comb_zero [simp]:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   993
  "start_sttp_resp f \<Longrightarrow> (mt_sttp_flatten (f sttp)) ! 0 = Some sttp"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   994
  apply (simp only: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   995
  apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   996
   apply (simp add: comb_nil_def mt_sttp_flatten_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   997
  apply (simp add: start_sttp_resp_cons_def mt_sttp_flatten_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   998
  apply (drule_tac x=sttp in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
   999
  apply (erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1000
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1001
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1002
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1003
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1004
(* move into prelude -- compare with nat_int_length *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1005
lemma int_outside_right: "0 \<le> (m::int) \<Longrightarrow> m + (int n) = int ((nat m) + n)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1006
  by simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1007
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1008
lemma int_outside_left: "0 \<le> (m::int) \<Longrightarrow> (int n) + m = int (n + (nat m))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1009
  by simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1010
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1011
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1012
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1013
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1014
  (* ********************************************************************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1015
  (* bc_mt_corresp for individual instructions                              *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1016
  (* ---------------------------------------------------------------------- *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1017
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1018
lemma less_Suc [simp] : "n \<le> k \<Longrightarrow> (k < Suc n) = (k = n)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1019
  by arith
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1020
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1021
lemmas check_type_simps = check_type_def states_def JVMType.sl_def
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1022
   Product.esl_def stk_esl_def reg_sl_def upto_esl_def Listn.sl_def Err.sl_def
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1023
  JType.esl_def Err.esl_def Err.le_def Listn.le_def Product.le_def Product.sup_def Err.sup_def
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1024
  Opt.esl_def Listn.sup_def
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1025
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1026
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1027
lemma check_type_push: 
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1028
  "\<lbrakk> is_class cG cname; check_type cG (length ST) mxr (OK (Some (ST, LT))) \<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1029
  \<Longrightarrow> check_type cG (Suc (length ST)) mxr (OK (Some (Class cname # ST, LT)))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1030
  apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1031
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1032
  apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1033
  apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1034
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1035
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1036
lemma bc_mt_corresp_New: "\<lbrakk>is_class cG cname \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1037
  \<Longrightarrow> bc_mt_corresp [New cname] (pushST [Class cname]) (ST, LT) cG rT mxr (Suc 0)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1038
  apply (simp add: bc_mt_corresp_def pushST_def wt_instr_altern_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1039
                   max_ssize_def max_of_list_def ssize_sto_def eff_def norm_eff_def max.absorb2)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1040
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1041
  apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1042
   apply (rule check_type_mono, assumption, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1043
  apply (simp add: check_type_push)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1044
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1045
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1046
lemma bc_mt_corresp_Pop: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1047
  bc_mt_corresp [Pop] (popST (Suc 0)) (T # ST, LT) cG rT mxr (Suc 0)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1048
  apply (simp add: bc_mt_corresp_def popST_def wt_instr_altern_def eff_def norm_eff_def)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1049
  apply (simp add: max_ssize_def ssize_sto_def max_of_list_def)
54863
82acc20ded73 prefer more canonical names for lemmas on min/max
haftmann
parents: 46226
diff changeset
  1050
  apply (simp add: check_type_simps max.absorb1)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1051
  apply clarify
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1052
  apply (rule_tac x="(length ST)" in exI)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1053
  apply simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1054
  done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1055
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1056
lemma bc_mt_corresp_Checkcast: "\<lbrakk> is_class cG cname; sttp = (ST, LT); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1057
  (\<exists>rT STo. ST = RefT rT # STo) \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1058
  \<Longrightarrow> bc_mt_corresp [Checkcast cname] (replST (Suc 0) (Class cname)) sttp cG rT mxr (Suc 0)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1059
  apply (erule exE)+
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1060
  apply (simp add: bc_mt_corresp_def replST_def wt_instr_altern_def eff_def norm_eff_def)
32443
16464c3f86bd tuned proofs
nipkow
parents: 32436
diff changeset
  1061
  apply (simp add: max_ssize_def max_of_list_def ssize_sto_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1062
  apply (simp add: check_type_simps)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1063
  apply clarify
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1064
  apply (rule_tac x="Suc (length STo)" in exI)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1065
  apply simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1066
  done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1067
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1068
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1069
lemma bc_mt_corresp_LitPush: "\<lbrakk> typeof (\<lambda>v. None) val = Some T \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1070
  \<Longrightarrow> bc_mt_corresp [LitPush val] (pushST [T]) sttp cG rT mxr (Suc 0)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1071
  apply (subgoal_tac "\<exists>ST LT. sttp= (ST, LT)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1072
   apply (simp add: bc_mt_corresp_def pushST_def wt_instr_altern_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1073
                    max_ssize_def max_of_list_def ssize_sto_def eff_def norm_eff_def max.absorb2)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1074
   apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1075
   apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1076
    apply (rule check_type_mono, assumption, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1077
   apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1078
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1079
   apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1080
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1081
   apply (drule sym)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1082
   apply (case_tac val)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1083
       apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1084
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1085
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1086
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1087
lemma bc_mt_corresp_LitPush_CT:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1088
  "\<lbrakk> typeof (\<lambda>v. None) val = Some T \<and> cG \<turnstile> T \<preceq> T'; is_type cG T' \<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1089
  \<Longrightarrow> bc_mt_corresp [LitPush val] (pushST [T']) sttp cG rT mxr (Suc 0)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1090
  apply (subgoal_tac "\<exists>ST LT. sttp= (ST, LT)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1091
   apply (simp add: bc_mt_corresp_def pushST_def wt_instr_altern_def max_ssize_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1092
                    max_of_list_def ssize_sto_def eff_def norm_eff_def max.absorb2)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1093
   apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1094
   apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1095
    apply (rule check_type_mono, assumption, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1096
   apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1097
   apply (simp add: sup_state_Cons)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1098
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1099
   apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1100
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1101
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1102
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1103
33954
1bc3b688548c backported parts of abstract byte code verifier from AFP/Jinja
haftmann
parents: 33640
diff changeset
  1104
declare not_Err_eq [iff del]
1bc3b688548c backported parts of abstract byte code verifier from AFP/Jinja
haftmann
parents: 33640
diff changeset
  1105
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1106
lemma bc_mt_corresp_Load: "\<lbrakk> i < length LT; LT ! i \<noteq> Err; mxr = length LT \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1107
  \<Longrightarrow> bc_mt_corresp [Load i] 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1108
         (\<lambda>(ST, LT). pushST [ok_val (LT ! i)] (ST, LT)) (ST, LT) cG rT mxr (Suc 0)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1109
  apply (simp add: bc_mt_corresp_def pushST_def wt_instr_altern_def max_ssize_def max_of_list_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1110
                   ssize_sto_def eff_def norm_eff_def max.absorb2)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1111
  apply (intro strip)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1112
  apply (rule conjI)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1113
   apply (rule check_type_mono, assumption, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1114
  apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1115
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1116
  apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1117
  apply (simp (no_asm_simp))
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1118
  apply (simp only: err_def)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1119
  apply (frule listE_nth_in)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1120
   apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1121
  apply (subgoal_tac "LT ! i \<in> {x. \<exists>y\<in>types cG. x = OK y}")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1122
   apply (drule CollectD)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1123
   apply (erule bexE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1124
   apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1125
   apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1126
  apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1127
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1128
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1129
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1130
lemma bc_mt_corresp_Store_init:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1131
  "i < length LT \<Longrightarrow> bc_mt_corresp [Store i] (storeST i T) (T # ST, LT) cG rT mxr (Suc 0)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1132
  apply (simp add: bc_mt_corresp_def storeST_def wt_instr_altern_def eff_def norm_eff_def)
32642
026e7c6a6d08 be more cautious wrt. simp rules: inf_absorb1, inf_absorb2, sup_absorb1, sup_absorb2 are no simp rules by default any longer
haftmann
parents: 32443
diff changeset
  1133
  apply (simp add: max_ssize_def  max_of_list_def)
32436
10cd49e0c067 Turned "x <= y ==> sup x y = y" (and relatives) into simp rules
nipkow
parents: 31082
diff changeset
  1134
  apply (simp add: ssize_sto_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1135
  apply (intro strip)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1136
  apply (simp add: check_type_simps max.absorb1)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1137
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1138
  apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1139
   apply (rule_tac x="(length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1140
   apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1141
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1142
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1143
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1144
lemma bc_mt_corresp_Store:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1145
  "\<lbrakk> i < length LT; cG  \<turnstile>  LT[i := OK T] <=l LT \<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1146
  \<Longrightarrow> bc_mt_corresp [Store i] (popST (Suc 0)) (T # ST, LT) cG rT mxr (Suc 0)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1147
  apply (simp add: bc_mt_corresp_def popST_def wt_instr_altern_def eff_def norm_eff_def)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1148
  apply (simp add: sup_state_conv)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1149
  apply (simp add: max_ssize_def max_of_list_def ssize_sto_def)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1150
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1151
  apply (simp add: check_type_simps max.absorb1)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1152
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1153
  apply (rule_tac x="(length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1154
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1155
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1156
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1157
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1158
lemma bc_mt_corresp_Dup: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1159
  bc_mt_corresp [Dup] dupST (T # ST, LT) cG rT mxr (Suc 0)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1160
  apply (simp add: bc_mt_corresp_def dupST_def wt_instr_altern_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1161
                   max_ssize_def max_of_list_def ssize_sto_def eff_def norm_eff_def max.absorb2)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1162
  apply (intro strip)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1163
  apply (rule conjI)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1164
   apply (rule check_type_mono, assumption, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1165
  apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1166
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1167
  apply (rule_tac x="Suc (Suc (length ST))" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1168
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1169
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1170
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1171
lemma bc_mt_corresp_Dup_x1: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1172
  bc_mt_corresp [Dup_x1] dup_x1ST (T1 # T2 # ST, LT) cG rT mxr (Suc 0)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1173
  apply (simp add: bc_mt_corresp_def dup_x1ST_def wt_instr_altern_def
54863
82acc20ded73 prefer more canonical names for lemmas on min/max
haftmann
parents: 46226
diff changeset
  1174
              max_ssize_def max_of_list_def ssize_sto_def eff_def norm_eff_def max.absorb2)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1175
  apply (intro strip)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1176
  apply (rule conjI)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1177
   apply (rule check_type_mono, assumption, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1178
  apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1179
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1180
  apply (rule_tac x="Suc (Suc (Suc (length ST)))" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1181
  apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1182
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1183
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1184
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1185
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1186
lemma bc_mt_corresp_IAdd: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1187
  bc_mt_corresp [IAdd] (replST 2 (PrimT Integer)) 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1188
         (PrimT Integer # PrimT Integer # ST, LT) cG rT mxr (Suc 0)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1189
  apply (simp add: bc_mt_corresp_def replST_def wt_instr_altern_def eff_def norm_eff_def)
32443
16464c3f86bd tuned proofs
nipkow
parents: 32436
diff changeset
  1190
  apply (simp add: max_ssize_def max_of_list_def ssize_sto_def)
54863
82acc20ded73 prefer more canonical names for lemmas on min/max
haftmann
parents: 46226
diff changeset
  1191
  apply (simp add: check_type_simps max.absorb1)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1192
  apply clarify
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1193
  apply (rule_tac x="Suc (length ST)" in exI)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1194
  apply simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1195
  done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1196
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1197
lemma bc_mt_corresp_Getfield: "\<lbrakk> wf_prog wf_mb G; 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1198
  field (G, C) vname = Some (cname, T);  is_class G C \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1199
  \<Longrightarrow> bc_mt_corresp [Getfield vname cname] 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1200
        (replST (Suc 0) (snd (the (field (G, cname) vname))))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1201
        (Class C # ST, LT) (comp G) rT mxr (Suc 0)"
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  1202
  apply (frule wf_prog_ws_prog [THEN wf_subcls1])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1203
  apply (frule field_in_fd, assumption+)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1204
  apply (frule widen_field, assumption+)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1205
  apply (simp add: bc_mt_corresp_def replST_def wt_instr_altern_def eff_def norm_eff_def)
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  1206
  apply (simp add: comp_field comp_subcls1 comp_widen comp_is_class)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1207
  apply (simp add: max_ssize_def max_of_list_def ssize_sto_def)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1208
  apply (intro strip)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1209
  apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1210
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1211
  apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1212
  apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1213
  apply (simp only: comp_is_type)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1214
  apply (rule_tac C=cname in fields_is_type)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1215
    apply (simp add: TypeRel.field_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1216
    apply (drule JBasis.table_of_remap_SomeD)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1217
    apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1218
   apply (erule wf_prog_ws_prog)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1219
  apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1220
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1221
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1222
lemma bc_mt_corresp_Putfield: "\<lbrakk> wf_prog wf_mb G; 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1223
  field (G, C) vname = Some (cname, Ta); G \<turnstile> T \<preceq> Ta; is_class G C \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1224
  \<Longrightarrow> bc_mt_corresp [Putfield vname cname] (popST 2) (T # Class C # T # ST, LT)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1225
           (comp G) rT mxr (Suc 0)"
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  1226
  apply (frule wf_prog_ws_prog [THEN wf_subcls1])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1227
  apply (frule field_in_fd, assumption+)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1228
  apply (frule widen_field, assumption+)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1229
  apply (simp add: bc_mt_corresp_def popST_def wt_instr_altern_def eff_def norm_eff_def)
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  1230
  apply (simp add: comp_field comp_subcls1 comp_widen comp_is_class)
32443
16464c3f86bd tuned proofs
nipkow
parents: 32436
diff changeset
  1231
  apply (simp add: max_ssize_def max_of_list_def ssize_sto_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1232
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1233
  apply (intro strip)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1234
  apply (simp add: check_type_simps max.absorb1)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1235
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1236
  apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1237
  apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1238
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1239
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1240
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1241
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1242
lemma Call_app:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1243
  "\<lbrakk> wf_prog wf_mb G; is_class G cname;
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1244
     STs = rev pTsa @ Class cname # ST;
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1245
     max_spec G cname (mname, pTsa) = {((md, T), pTs')} \<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1246
  \<Longrightarrow> app (Invoke cname mname pTs') (comp G) (length (T # ST)) rT 0 empty_et (Some (STs, LTs))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1247
  apply (subgoal_tac "(\<exists>mD' rT' comp_b. 
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1248
                        method (comp G, cname) (mname, pTs') = Some (mD', rT', comp_b))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1249
   apply (simp add: comp_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1250
   apply (rule_tac x=pTsa in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1251
   apply (rule_tac x="Class cname" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1252
   apply (simp add: max_spec_preserves_length comp_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1253
   apply (frule max_spec2mheads, (erule exE)+, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1254
   apply (simp add: split_paired_all comp_widen list_all2_iff)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1255
  apply (frule max_spec2mheads, (erule exE)+, (erule conjE)+)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1256
  apply (rule exI)+
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  1257
  apply (simp add: wf_prog_ws_prog [THEN comp_method])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1258
  done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1259
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1260
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1261
lemma bc_mt_corresp_Invoke:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1262
  "\<lbrakk> wf_prog wf_mb G; 
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1263
  max_spec G cname (mname, pTsa) = {((md, T), fpTs)};
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1264
  is_class G cname \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1265
 \<Longrightarrow> bc_mt_corresp [Invoke cname mname fpTs] (replST (Suc (length pTsa)) T)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1266
           (rev pTsa @ Class cname # ST, LT) (comp G) rT mxr (Suc 0)"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1267
  apply (simp add: bc_mt_corresp_def wt_instr_altern_def eff_def norm_eff_def)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1268
  apply (simp add: replST_def del: appInvoke)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1269
  apply (intro strip)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1270
  apply (rule conjI)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1271
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
  1272
   \<comment> "app"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1273
   apply (rule Call_app [THEN app_mono_mxs])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1274
       apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1275
     apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1276
    apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1277
   apply (simp add: max_ssize_def max_of_list_elem ssize_sto_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1278
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
  1279
  \<comment> \<open>\<open><=s\<close>\<close>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1280
  apply (frule max_spec2mheads, (erule exE)+, (erule conjE)+)
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  1281
  apply (simp add: wf_prog_ws_prog [THEN comp_method])
59199
wenzelm
parents: 58886
diff changeset
  1282
  apply (simp add: max_spec_preserves_length [symmetric])
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1283
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 61361
diff changeset
  1284
  \<comment> "\<open>check_type\<close>"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1285
  apply (simp add: max_ssize_def ssize_sto_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1286
  apply (simp add: max_of_list_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1287
  apply (subgoal_tac "(max (length pTsa + length ST) (length ST)) = (length pTsa + length ST)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1288
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1289
   apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1290
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1291
   apply (rule_tac x="Suc (length ST)" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1292
   apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1293
   apply (simp only: comp_is_type)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1294
   apply (frule method_wf_mdecl) apply assumption apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1295
   apply (simp add: wf_mdecl_def wf_mhead_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1296
  apply (simp)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1297
  done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1298
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1299
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1300
lemma wt_instr_Ifcmpeq: "\<lbrakk>Suc pc < max_pc; 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1301
  0 \<le> (int pc + i);  nat (int pc + i) < max_pc;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1302
  (mt_sttp_flatten f ! pc = Some (ts#ts'#ST,LT)) \<and> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1303
  ((\<exists>p. ts = PrimT p \<and> ts' = PrimT p) \<or> (\<exists>r r'. ts = RefT r \<and> ts' = RefT r'));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1304
  mt_sttp_flatten f ! Suc pc = Some (ST,LT);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1305
  mt_sttp_flatten f ! nat (int pc + i) = Some (ST,LT);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1306
  check_type (TranslComp.comp G) mxs mxr (OK (Some (ts # ts' # ST, LT))) \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1307
    \<Longrightarrow>  wt_instr_altern (Ifcmpeq i) (comp G) rT  (mt_sttp_flatten f) mxs mxr max_pc empty_et pc"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1308
  by (simp  add: wt_instr_altern_def eff_def norm_eff_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1309
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1310
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1311
lemma wt_instr_Goto: "\<lbrakk> 0 \<le> (int pc + i); nat (int pc + i) < max_pc;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1312
  mt_sttp_flatten f ! nat (int pc + i) = (mt_sttp_flatten f ! pc);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1313
  check_type (TranslComp.comp G) mxs mxr (OK (mt_sttp_flatten f ! pc)) \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1314
  \<Longrightarrow> wt_instr_altern (Goto i) (comp G) rT  (mt_sttp_flatten f) mxs mxr max_pc empty_et pc"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1315
  apply (case_tac "(mt_sttp_flatten f ! pc)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1316
   apply (simp  add: wt_instr_altern_def eff_def norm_eff_def app_def xcpt_app_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1317
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1318
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1319
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1320
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1321
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1322
  (* ********************************************************************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1323
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1324
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1325
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1326
lemma bc_mt_corresp_comb_inside: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1327
  \<lbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1328
  bc_mt_corresp bc' f' sttp0 cG rT mxr l1;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1329
  bc' = (bc1@bc2@bc3); f'= (f1 \<box> f2 \<box> f3); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1330
  l1 = (length bc1); l12 = (length (bc1@bc2));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1331
  bc_mt_corresp bc2 f2 (sttp_of (f1 sttp0)) cG rT mxr (length bc2);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1332
  length bc1 = length (mt_of (f1 sttp0));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1333
  start_sttp_resp f2; start_sttp_resp f3\<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1334
\<Longrightarrow> bc_mt_corresp bc' f' sttp0 cG rT mxr l12"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1335
  apply (subgoal_tac "\<exists> mt1 sttp1. (f1 sttp0) = (mt1, sttp1)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1336
   apply (subgoal_tac "\<exists> mt2 sttp2. (f2 sttp1) = (mt2, sttp2)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1337
    apply (subgoal_tac "\<exists> mt3 sttp3. (f3 sttp2) = (mt3, sttp3)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1338
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1339
     (* unfold start_sttp_resp and make case distinction *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1340
     apply (simp only: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1341
     apply (erule_tac Q="start_sttp_resp_cons f2" in disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1342
      (* case f2 = comb_nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1343
      apply (simp add: bc_mt_corresp_def comb_nil_def start_sttp_resp_cons_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1344
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1345
     (* case start_sttp_resp_cons f2 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1346
     apply (simp add: bc_mt_corresp_def comb_def start_sttp_resp_cons_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1347
     apply (drule_tac x=sttp1 in spec, simp, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1348
     apply (intro strip, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1349
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1350
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1351
     (* get rid of all check_type info *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1352
     apply (subgoal_tac "check_type cG (length (fst sttp1)) mxr (OK (Some sttp1))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1353
      apply (subgoal_tac "check_type cG (max_ssize (mt2 @ [Some sttp2])) mxr (OK (Some sttp2))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1354
       apply (subgoal_tac "check_type cG (max_ssize (mt1 @ mt2 @ mt3 @ [Some sttp3])) mxr
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1355
                                         (OK ((mt2 @ mt3 @ [Some sttp3]) ! length mt2))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1356
        apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1357
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1358
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1359
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1360
        apply (intro strip, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1361
        apply (case_tac "pc < length mt1")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1362
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1363
         (* case pc < length mt1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1364
         apply (drule spec, drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1365
         apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1366
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1367
        (* case pc \<ge> length mt1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1368
        (* case distinction on start_sttp_resp f3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1369
        apply (erule_tac P="f3 = comb_nil" in disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1370
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1371
         (* case f3 = comb_nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1372
         apply (subgoal_tac "mt3 = [] \<and> sttp2 = sttp3")  apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1373
          apply (subgoal_tac "bc3=[]")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1374
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1375
           apply (rule_tac bc_pre=bc1 and bc=bc2 and bc_post=bc3
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1376
                       and mt_pre=mt1 and mt=mt2 and mt_post="mt3@ [Some sttp3]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1377
                       and mxs="(max_ssize (mt2 @ [(Some sttp2)]))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1378
                       and max_pc="(Suc (length mt2))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1379
                        in wt_instr_offset)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1380
                   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1381
                  apply (rule HOL.refl)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1382
                 apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1383
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1384
            apply (simp (no_asm_simp) add: max_ssize_def del: max_of_list_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1385
            apply (rule max_of_list_sublist)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1386
            apply (simp (no_asm_simp) only: set_append list.set list.map) apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1387
           apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1388
          apply simp                    (* subgoal bc3 = [] *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1389
         apply (simp add: comb_nil_def) (* subgoal mt3 = [] \<and> sttp2 = sttp3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1390
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1391
        (* case start_sttp_resp_cons f3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1392
        apply (subgoal_tac "\<exists>mt3_rest. (mt3 = Some sttp2 # mt3_rest)", erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1393
         apply (rule_tac bc_pre=bc1 and bc=bc2 and bc_post=bc3
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1394
                     and mt_pre=mt1 and mt=mt2 and mt_post="mt3@ [Some sttp3]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1395
                     and mxs="(max_ssize (mt2 @ [Some sttp2]))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1396
                     and max_pc="(Suc (length mt2))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1397
                      in wt_instr_offset)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1398
                 apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1399
                 apply (rule_tac bc=bc2 and mt="(mt2 @ [Some sttp2])"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1400
                             and mxs="(max_ssize (mt2 @ [Some sttp2]))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1401
                             and max_pc="(Suc (length mt2))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1402
                              in wt_instr_prefix)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1403
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1404
                        (* preconditions of  wt_instr_prefix *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1405
                        apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1406
                       apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1407
                      apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1408
                   apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1409
          (* (some) preconditions of  wt_instr_offset *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1410
          apply (simp (no_asm_simp) add: max_ssize_def del: max_of_list_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1411
          apply (rule max_of_list_sublist)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1412
          apply (simp (no_asm_simp) only: set_append list.set list.map)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1413
          apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1414
         apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1415
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1416
        apply (drule_tac x=sttp2 in spec, simp) (* subgoal \<exists>mt3_rest. \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1417
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1418
       (* subgoals check_type*)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1419
       (* \<dots> ! length mt2 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1420
       apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1421
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1422
       apply (erule_tac P="f3 = comb_nil" in disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1423
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1424
        (* -- case f3 = comb_nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1425
        apply (subgoal_tac "mt3 = [] \<and> sttp2 = sttp3")  apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1426
         apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1427
         apply (rule check_type_mono, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1428
         apply (simp only: max_ssize_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1429
         apply (rule max_of_list_sublist)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1430
         apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1431
         apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1432
        apply simp                    (* subgoal bc3 = [] *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1433
        apply (simp add: comb_nil_def) (* subgoal mt3 = [] \<and> sttp2 = sttp3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1434
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1435
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1436
       (* -- case start_sttp_resp_cons f3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1437
       apply (subgoal_tac "\<exists>mt3_rest. (mt3 = Some sttp2 # mt3_rest)", erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1438
        apply (simp (no_asm_simp) add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1439
        apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1440
        apply (rule check_type_mono, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1441
        apply (simp only: max_ssize_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1442
        apply (rule max_of_list_sublist)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1443
        apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1444
        apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1445
       apply (drule_tac x=sttp2 in spec, simp) (* subgoal \<exists>mt3_rest. \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1446
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1447
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1448
      (* subgoal check_type \<dots> Some sttp2 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1449
      apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1450
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1451
     (* subgoal check_type \<dots> Some sttp1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1452
     apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1453
     apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1454
     apply (case_tac "sttp1", simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1455
     apply (rule check_type_lower, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1456
     apply (simp (no_asm_simp) add: max_ssize_def ssize_sto_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1457
     apply (simp (no_asm_simp) add: max_of_list_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1458
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1459
    (* subgoals \<exists> ... *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1460
    apply (rule surj_pair)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1461
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1462
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1463
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1464
  (* ******************** *)
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
  1465
definition contracting :: "(state_type \<Rightarrow> method_type \<times> state_type) \<Rightarrow> bool" where
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1466
  "contracting f == (\<forall> ST LT. 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1467
                    let (ST', LT') = sttp_of (f (ST, LT)) 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1468
                    in (length ST' \<le> length ST \<and> set ST' \<subseteq> set ST  \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1469
                        length LT' = length LT \<and> set LT' \<subseteq> set LT))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1470
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1471
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1472
  (* ### possibly move into HOL *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1473
lemma set_drop_Suc [rule_format]: "\<forall>xs. set (drop (Suc n) xs) \<subseteq> set (drop n xs)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1474
  apply (induct n)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1475
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1476
   apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1477
   apply (rule list.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1478
    apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1479
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1480
   apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1481
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1482
  apply (rule_tac P="\<lambda> xs. set (drop (Suc (Suc n)) xs) \<subseteq> set (drop (Suc n) xs)" in list.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1483
   apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1484
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1485
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1486
lemma set_drop_le [rule_format,simp]: "\<forall>n xs. n \<le> m \<longrightarrow> set (drop m xs) \<subseteq> set (drop n xs)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1487
  apply (induct m)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1488
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1489
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1490
  apply (subgoal_tac "n \<le> m \<or> n = Suc m")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1491
   apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1492
    apply (frule_tac x=n in spec, drule_tac x=xs in spec, drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1493
    apply (rule set_drop_Suc [THEN subset_trans], assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1494
   apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1495
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1496
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1497
declare set_drop_subset [simp]
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1498
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1499
lemma contracting_popST [simp]: "contracting (popST n)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1500
  by (simp add: contracting_def popST_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1501
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1502
lemma contracting_nochangeST [simp]: "contracting nochangeST"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1503
  by (simp add: contracting_def nochangeST_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1504
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1505
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1506
lemma check_type_contracting: "\<lbrakk> check_type cG mxs mxr (OK (Some sttp)); contracting f\<rbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1507
  \<Longrightarrow> check_type cG mxs mxr (OK (Some (sttp_of (f sttp))))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1508
  apply (subgoal_tac "\<exists> ST LT. sttp = (ST, LT)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1509
   apply (simp add: check_type_simps contracting_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1510
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1511
   apply (drule_tac x=ST in spec, drule_tac x=LT in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1512
   apply (case_tac "(sttp_of (f (ST, LT)))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1513
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1514
   apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1515
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1516
   apply (drule listE_set)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1517
   apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1518
    apply (rule_tac x="length a" in exI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1519
    apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1520
    apply (rule listI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1521
     apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1522
    apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1523
   apply (rule listI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1524
    apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1525
   apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1526
  apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1527
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1528
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1529
  (* ******************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1530
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1531
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1532
lemma bc_mt_corresp_comb_wt_instr: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1533
  \<lbrakk> bc_mt_corresp bc' f' sttp0 cG rT mxr l1;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1534
  bc' = (bc1@[inst]@bc3); f'= (f1 \<box> f2 \<box> f3); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1535
  l1 = (length bc1); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1536
  length bc1 = length (mt_of (f1 sttp0));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1537
  length (mt_of (f2 (sttp_of (f1 sttp0)))) = 1;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1538
  start_sttp_resp_cons f1; start_sttp_resp_cons f2; start_sttp_resp f3;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1539
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1540
  check_type cG (max_ssize (mt_sttp_flatten (f' sttp0))) mxr
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1541
             (OK ((mt_sttp_flatten (f' sttp0)) ! (length bc1)))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1542
  \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1543
  wt_instr_altern inst cG rT 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1544
      (mt_sttp_flatten (f' sttp0)) 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1545
      (max_ssize (mt_sttp_flatten (f' sttp0)))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1546
      mxr
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1547
      (Suc (length bc'))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1548
      empty_et
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1549
      (length bc1);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1550
  contracting f2
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1551
 \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1552
\<Longrightarrow> bc_mt_corresp bc' f' sttp0 cG rT mxr (length (bc1@[inst]))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1553
  apply (subgoal_tac "\<exists> mt1 sttp1. (f1 sttp0) = (mt1, sttp1)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1554
   apply (subgoal_tac "\<exists> mt2 sttp2. (f2 sttp1) = (mt2, sttp2)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1555
    apply (subgoal_tac "\<exists> mt3 sttp3. (f3 sttp2) = (mt3, sttp3)", (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1556
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1557
     apply (simp add: bc_mt_corresp_def comb_def start_sttp_resp_cons_def
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1558
                      mt_sttp_flatten_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1559
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1560
     apply (intro strip, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1561
     apply (drule mp, assumption)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1562
     apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1563
     apply (drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1564
     apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1565
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1566
      (* wt_instr \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1567
      apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1568
      apply (case_tac "pc < length mt1")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1569
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1570
       (* case pc < length mt1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1571
       apply (drule spec, drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1572
       apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1573
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1574
      (* case pc \<ge> length mt1 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1575
      apply (subgoal_tac "pc = length mt1") prefer 2 apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1576
      apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1577
      apply (simp add: nth_append mt_sttp_flatten_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1578
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1579
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1580
     (* check_type \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1581
     apply (simp add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1582
     apply (drule_tac x="sttp0" in spec, simp, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1583
     apply (drule_tac x="sttp1" in spec, simp, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1584
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1585
     apply (subgoal_tac "check_type cG (max_ssize (mt1 @ mt2 @ mt3 @ [Some sttp3])) mxr
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1586
                                       (OK (Some (sttp_of (f2 sttp1))))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1587
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1588
      apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1589
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1590
      apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1591
       (* case f3 = comb_nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1592
       apply (subgoal_tac "((mt1 @ mt2 @ mt3 @ [Some sttp3]) ! Suc (length mt1)) = (Some (snd (f2 sttp1)))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1593
        apply (subgoal_tac "mt3 = [] \<and> sttp2 = sttp3")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1594
         apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1595
         apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1596
        apply (simp add: comb_nil_def) (* subgoal mt3 = [] \<and> sttp2 = sttp3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1597
       apply (simp add: nth_append comb_nil_def) (* subgoal \<dots> ! Suc (length mt1) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1598
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1599
      (* case start_sttp_resp_cons f3 *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1600
      apply (simp add: start_sttp_resp_cons_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1601
      apply (drule_tac x="sttp2" in spec, simp, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1602
      apply (simp  add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1603
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1604
     (* subgoal check_type *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1605
     apply (rule check_type_contracting)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1606
      apply (subgoal_tac "((mt1 @ mt2 @ mt3 @ [Some sttp3]) ! length mt1) = (Some sttp1)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1607
       apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1608
      apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1609
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1610
     apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1611
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1612
    (* subgoals *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1613
    apply (rule surj_pair)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1614
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1615
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1616
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1617
lemma compTpExpr_LT_ST_rewr [simp]:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1618
  "\<lbrakk> wf_java_prog G; wf_java_mdecl G C ((mn, pTs), rT, (pns, lvars, blk, res));
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1619
     local_env G C (mn, pTs) pns lvars \<turnstile> ex :: T;
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1620
     is_inited_LT C pTs lvars LT\<rbrakk>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1621
  \<Longrightarrow> sttp_of (compTpExpr (pns, lvars, blk, res) G ex (ST, LT)) = (T # ST, LT)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1622
  by (rule compTpExpr_LT_ST) auto
20432
07ec57376051 lin_arith_prover: splitting reverted because of performance loss
webertj
parents: 20272
diff changeset
  1623
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1624
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1625
lemma wt_method_compTpExpr_Exprs_corresp: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1626
  \<lbrakk> jmb = (pns,lvars,blk,res); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1627
  wf_prog wf_java_mdecl G;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1628
  wf_java_mdecl G C ((mn, pTs), rT, jmb);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1629
  E = (local_env G C (mn, pTs) pns lvars)\<rbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1630
\<Longrightarrow> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1631
 (\<forall> ST LT T bc' f'.
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1632
  E \<turnstile> ex :: T \<longrightarrow>  
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1633
  (is_inited_LT C pTs lvars LT) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1634
  bc' = (compExpr jmb ex) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1635
  f' = (compTpExpr jmb G ex)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1636
  \<longrightarrow> bc_mt_corresp bc' f' (ST, LT) (comp G) rT (length LT) (length bc'))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1637
 \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1638
 (\<forall> ST LT Ts.
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1639
  E \<turnstile> exs [::] Ts \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1640
  (is_inited_LT C pTs lvars LT) 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1641
  \<longrightarrow> bc_mt_corresp (compExprs jmb exs) (compTpExprs jmb G exs) (ST, LT) (comp G) rT (length LT) (length (compExprs jmb exs)))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1642
  apply (rule compat_expr_expr_list.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1643
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1644
            (* expresssions *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1645
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1646
            (* NewC *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1647
            apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1648
            apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1649
            apply (drule NewC_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1650
            apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1651
            apply (rule bc_mt_corresp_New)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1652
            apply (simp add: comp_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1653
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1654
           (* Cast *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1655
           apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1656
           apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1657
           apply (drule Cast_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1658
           apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1659
           apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1660
           apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1661
               apply (rule HOL.refl, simp (no_asm_simp), blast)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1662
            apply (simp (no_asm_simp), rule bc_mt_corresp_Checkcast)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1663
              apply (simp add: comp_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1664
             apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1665
            apply (drule cast_RefT)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1666
            apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1667
           apply (simp add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1668
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1669
          (* Lit *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1670
          apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1671
          apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1672
          apply (drule Lit_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1673
          apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1674
          apply (rule bc_mt_corresp_LitPush)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1675
          apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1676
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1677
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1678
         (* BinOp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1679
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1680
         apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1681
         apply (simp (no_asm_simp) only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1682
         apply (drule BinOp_invers, erule exE, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1683
         apply (rename_tac binop expr1 expr2 ST LT T bc' f' Ta, case_tac binop)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1684
          apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1685
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1686
          (* case Eq *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1687
          apply (subgoal_tac "bc_mt_corresp bc' f' (ST, LT) (comp G) rT (length LT) 0")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1688
           prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1689
           apply (rule bc_mt_corresp_zero)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1690
            apply (simp add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1691
           apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1692
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1693
          apply (drule_tac ?bc1.0="[]" and ?bc2.0 = "compExpr jmb expr1"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1694
                       and ?f1.0=comb_nil and ?f2.0 = "compTpExpr jmb G expr1"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1695
                        in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1696
                  apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1697
              apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1698
             apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1699
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1700
          apply (drule_tac ?bc2.0 = "compExpr jmb expr2" and ?f2.0 = "compTpExpr jmb G expr2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1701
                        in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1702
                  apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1703
              apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1704
             apply (simp (no_asm_simp) add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1705
            apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1706
           apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1707
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1708
          apply (drule_tac ?bc1.0 = "compExpr jmb expr1 @ compExpr jmb expr2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1709
                        and inst = "Ifcmpeq 3" and ?bc3.0 = "[LitPush (Bool False),Goto 2, LitPush (Bool True)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1710
                        and ?f1.0="compTpExpr jmb G expr1 \<box> compTpExpr jmb G expr2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1711
                        and ?f2.0="popST 2" and ?f3.0="pushST [PrimT Boolean] \<box> popST 1 \<box> pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1712
                         in bc_mt_corresp_comb_wt_instr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1713
                    apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1714
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1715
            (* wt_instr *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1716
            apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1717
            apply (simp (no_asm_simp) add: wt_instr_altern_def length_compTpExpr eff_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1718
            apply (simp (no_asm_simp) add: norm_eff_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1719
            apply (simp (no_asm_simp) only: int_outside_left nat_int)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1720
            apply (simp (no_asm_simp) add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1721
            apply (simp only: compTpExpr_LT_ST)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1722
            apply (simp add: eff_def norm_eff_def popST_def pushST_def mt_sttp_flatten_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1723
            apply (case_tac Ta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1724
             apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1725
            apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1726
           apply (rule contracting_popST)                (* contracting (popST 2)  *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1727
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1728
          apply (drule_tac ?bc1.0 = "compExpr jmb expr1 @ compExpr jmb expr2 @ [Ifcmpeq 3]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1729
                       and ?bc2.0 = "[LitPush (Bool False)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1730
                       and ?bc3.0 = "[Goto 2, LitPush (Bool True)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1731
                       and ?f1.0 = "compTpExpr jmb G expr1 \<box> compTpExpr jmb G expr2 \<box> popST 2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1732
                       and ?f2.0 = "pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1733
                       and ?f3.0 = "popST (Suc 0) \<box> pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1734
                        in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1735
                  apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1736
              apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1737
              apply (rule_tac T="(PrimT Boolean)" in bc_mt_corresp_LitPush) apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1738
             apply (simp (no_asm_simp) add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1739
            apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1740
           apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1741
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1742
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1743
          apply (drule_tac ?bc1.0 = "compExpr jmb expr1 @ compExpr jmb expr2 @ [Ifcmpeq 3, LitPush (Bool False)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1744
                       and inst = "Goto 2" and ?bc3.0 = "[LitPush (Bool True)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1745
                       and ?f1.0="compTpExpr jmb G expr1 \<box> compTpExpr jmb G expr2 \<box> popST 2 \<box> pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1746
                       and ?f2.0="popST 1" and ?f3.0="pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1747
                        in bc_mt_corresp_comb_wt_instr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1748
                    apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1749
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1750
            (* wt_instr *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1751
            apply (simp (no_asm_simp) add: wt_instr_altern_def length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1752
            apply (simp (no_asm_simp) add: eff_def norm_eff_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1753
            apply (simp (no_asm_simp) only: int_outside_right nat_int)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1754
            apply (simp (no_asm_simp) add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1755
            apply (simp only: compTpExpr_LT_ST)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1756
            apply (simp add: eff_def norm_eff_def popST_def pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1757
           apply (rule contracting_popST)                (* contracting (popST 1) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1758
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1759
          apply (drule_tac ?bc1.0 = "compExpr jmb expr1 @ compExpr jmb expr2 @ [Ifcmpeq 3, LitPush (Bool False), Goto 2]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1760
                       and ?bc2.0 = "[LitPush (Bool True)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1761
                       and ?bc3.0 = "[]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1762
                       and ?f1.0 = "compTpExpr jmb G expr1 \<box> compTpExpr jmb G expr2 \<box> popST 2 \<box>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1763
                                    pushST [PrimT Boolean] \<box> popST (Suc 0)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1764
                       and ?f2.0 = "pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1765
                       and ?f3.0 = "comb_nil"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1766
                        in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1767
                  apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1768
              apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1769
              apply (rule_tac T="(PrimT Boolean)" in bc_mt_corresp_LitPush)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1770
              apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1771
             apply (simp (no_asm_simp) add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1772
            apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1773
           apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1774
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1775
          apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1776
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1777
         (* case Add *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1778
         apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1779
         apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1780
             apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1781
            apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1782
           apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1783
          apply (rule bc_mt_corresp_comb, rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1784
             apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1785
            apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1786
            apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1787
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1788
           apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1789
           apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1790
           apply (rule bc_mt_corresp_IAdd)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1791
          apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1792
         apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1793
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1794
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1795
        (* LAcc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1796
        apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1797
        apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1798
        apply (drule LAcc_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1799
        apply (frule wf_java_mdecl_length_pTs_pns)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1800
        apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1801
        apply (simp add: is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1802
        apply (rule bc_mt_corresp_Load)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1803
          apply (rule index_in_bounds)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1804
           apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1805
          apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1806
         apply (rule inited_LT_at_index_no_err)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1807
         apply (rule index_in_bounds)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1808
          apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1809
         apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1810
        apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1811
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1812
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1813
       (* LAss *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1814
       apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1815
       apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1816
       apply (drule LAss_invers, erule exE, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1817
       apply (drule LAcc_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1818
       apply (frule wf_java_mdecl_disjoint_varnames, simp add: disjoint_varnames_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1819
       apply (frule wf_java_mdecl_length_pTs_pns)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1820
       apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1821
       apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1822
       apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1823
           apply (rule HOL.refl, simp (no_asm_simp), blast)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1824
        apply (rename_tac vname x2 ST LT T Ta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1825
        apply (rule_tac ?bc1.0="[Dup]" and ?bc2.0="[Store (index (pns, lvars, blk, res) vname)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1826
                    and ?f1.0="dupST" and ?f2.0="popST (Suc 0)"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1827
                     in bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1828
            apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1829
          apply (rule bc_mt_corresp_Dup)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1830
         apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1831
         apply (simp add: dupST_def is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1832
         apply (rule bc_mt_corresp_Store)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1833
          apply (rule index_in_bounds)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1834
           apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1835
          apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1836
         apply (rule sup_loc_update_index, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1837
            apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1838
           apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1839
        apply (simp add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1840
       apply (simp add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1841
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1842
      (* FAcc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1843
      apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1844
      apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1845
      apply (drule FAcc_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1846
      apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1847
      apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1848
      apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1849
          apply (rule HOL.refl, simp (no_asm_simp), blast)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1850
       apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1851
       apply (rule bc_mt_corresp_Getfield)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1852
         apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1853
       apply (fast intro: wt_class_expr_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1854
      apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1855
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1856
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1857
     (* FAss *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1858
     apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1859
     apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1860
     apply (drule FAss_invers, erule exE, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1861
     apply (drule FAcc_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1862
     apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1863
     apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1864
     apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1865
         apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1866
        apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1867
       apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1868
      apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1869
      apply (rule bc_mt_corresp_comb, (rule HOL.refl)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1870
        apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1871
       apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1872
       apply (rename_tac cname x2 vname x4 ST LT T Ta Ca)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1873
       apply (rule_tac ?bc1.0="[Dup_x1]" and ?bc2.0="[Putfield vname cname]" in bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1874
           apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1875
         apply (rule bc_mt_corresp_Dup_x1)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1876
        apply (simp (no_asm_simp) add: dup_x1ST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1877
        apply (rule bc_mt_corresp_Putfield, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1878
        apply (fast intro: wt_class_expr_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1879
       apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1880
      apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1881
     apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1882
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1883
    (* Call *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1884
    apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1885
    apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1886
    apply (drule Call_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1887
    apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1888
    apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1889
    apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1890
        apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1891
       apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1892
      apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1893
     apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1894
     apply (rule bc_mt_corresp_comb, (rule HOL.refl)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1895
       apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1896
      apply (simp only: compTpExprs_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1897
      apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1898
      apply (rule bc_mt_corresp_Invoke)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1899
        apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1900
      apply (fast intro: wt_class_expr_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1901
     apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1902
    apply (rule start_sttp_resp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1903
     apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1904
    apply (simp (no_asm_simp) add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1905
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1906
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1907
   (* expression lists *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1908
   (* nil *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1909
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1910
   apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1911
   apply (drule Nil_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1912
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1913
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1914
  (* cons *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1915
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1916
  apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1917
  apply (drule Cons_invers, (erule exE)+, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1918
  apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1919
  apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1920
  apply (rule bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1921
      apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1922
     apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1923
    apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1924
   apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1925
   apply blast
46226
e88e980ed735 tuned proofs;
wenzelm
parents: 37456
diff changeset
  1926
  apply simp
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1927
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1928
done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1929
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1930
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1931
lemmas wt_method_compTpExpr_corresp [rule_format (no_asm)] = 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1932
  wt_method_compTpExpr_Exprs_corresp [THEN conjunct1]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1933
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1934
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1935
  (* ********************************************************************** *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1936
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1937
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1938
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1939
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1940
lemma wt_method_compTpStmt_corresp [rule_format (no_asm)]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1941
  \<lbrakk> jmb = (pns,lvars,blk,res); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1942
  wf_prog wf_java_mdecl G;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1943
  wf_java_mdecl G C ((mn, pTs), rT, jmb);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1944
  E = (local_env G C (mn, pTs) pns lvars)\<rbrakk> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1945
\<Longrightarrow> 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1946
 (\<forall> ST LT T bc' f'.
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1947
  E \<turnstile> s\<surd> \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1948
  (is_inited_LT C pTs lvars LT) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1949
  bc' = (compStmt jmb s) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1950
  f' = (compTpStmt jmb G s)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1951
  \<longrightarrow> bc_mt_corresp bc' f' (ST, LT) (comp G) rT (length LT) (length bc'))"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  1952
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1953
  apply (rule stmt.induct)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1954
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1955
      (* Skip *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1956
      apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1957
      apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1958
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1959
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1960
     (* Expr *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1961
     apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1962
     apply (drule Expr_invers, erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1963
     apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1964
     apply (rule bc_mt_corresp_comb) apply (rule HOL.refl, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1965
       apply (rule wt_method_compTpExpr_corresp) apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1966
        apply (simp add: compTpExpr_LT_ST [of _ pns lvars blk res])+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1967
      apply (rule bc_mt_corresp_Pop)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1968
     apply (simp add: start_sttp_resp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1969
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1970
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1971
    (* Comp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1972
    apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1973
    apply (drule Comp_invers)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1974
    apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1975
    apply (simp (no_asm_use))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1976
    apply (rule bc_mt_corresp_comb) apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1977
       apply (simp (no_asm_simp)) apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1978
     apply (simp only: compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1979
    apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1980
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1981
   (* Cond *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1982
   apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1983
   apply (simp (no_asm_simp) only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1984
   apply (drule Cond_invers, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1985
   apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1986
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1987
   apply (subgoal_tac "bc_mt_corresp bc' f' (ST, LT) (comp G) rT (length LT) 0")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1988
    prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1989
    apply (rule bc_mt_corresp_zero)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1990
     apply (simp (no_asm_simp) add: length_compTpStmt length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1991
    apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1992
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1993
   apply (rename_tac expr stmt1 stmt2 ST LT bc' f')
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1994
   apply (drule_tac ?bc1.0="[]" and ?bc2.0 = "[LitPush (Bool False)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1995
                and ?bc3.0="compExpr jmb expr @ Ifcmpeq (2 + int (length (compStmt jmb stmt1))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1996
                            compStmt jmb stmt1 @ Goto (1 + int (length (compStmt jmb stmt2))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1997
                            compStmt jmb stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1998
                and ?f1.0=comb_nil and ?f2.0 = "pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  1999
                and ?f3.0="compTpExpr jmb G expr \<box> popST 2 \<box> compTpStmt jmb G stmt1 \<box>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2000
                           nochangeST \<box> compTpStmt jmb G stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2001
                 in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2002
           apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2003
       apply (rule_tac T="(PrimT Boolean)" in bc_mt_corresp_LitPush)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2004
       apply (simp (no_asm_simp) add: start_sttp_resp_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2005
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2006
   apply (drule_tac ?bc1.0="[LitPush (Bool False)]" and ?bc2.0 = "compExpr jmb expr"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2007
                and ?bc3.0="Ifcmpeq (2 + int (length (compStmt jmb stmt1))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2008
                            compStmt jmb stmt1 @ Goto (1 + int (length (compStmt jmb stmt2))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2009
                            compStmt jmb stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2010
                and ?f1.0="pushST [PrimT Boolean]" and ?f2.0 = "compTpExpr jmb G expr"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2011
                and ?f3.0="popST 2 \<box> compTpStmt jmb G stmt1 \<box> nochangeST \<box> compTpStmt jmb G stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2012
                 in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2013
           apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2014
       apply (simp (no_asm_simp)  add: pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2015
       apply (rule  wt_method_compTpExpr_corresp, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2016
        apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2017
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2018
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2019
   apply (drule_tac ?bc1.0 = "[LitPush (Bool False)] @ compExpr jmb expr"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2020
                and inst = "Ifcmpeq (2 + int (length (compStmt jmb stmt1)))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2021
                and ?bc3.0 = "compStmt jmb stmt1 @ Goto (1 + int (length (compStmt jmb stmt2))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2022
                              compStmt jmb stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2023
                and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr" and ?f2.0 = "popST 2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2024
                and ?f3.0="compTpStmt jmb G stmt1 \<box> nochangeST \<box> compTpStmt jmb G stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2025
                 in bc_mt_corresp_comb_wt_instr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2026
             apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2027
      apply (simp (no_asm_simp) add: start_sttp_resp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2028
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2029
     (* wt_instr *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2030
     apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2031
     apply (rule_tac ts="PrimT Boolean" and ts'="PrimT Boolean" and ST=ST and LT=LT
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2032
                  in wt_instr_Ifcmpeq)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2033
           apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2034
          apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2035
        apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2036
        (* current pc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2037
        apply (simp add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2038
       apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2039
       (* Suc pc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2040
       apply (simp add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2041
       apply (simp add: popST_def start_sttp_resp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2042
      (* jump goal *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2043
      apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2044
      apply (simp add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2045
      apply (simp add: popST_def start_sttp_resp_comb length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2046
      apply (simp only: compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2047
      apply (simp add: nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2048
     (* check_type *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2049
     apply (subgoal_tac "
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2050
      (mt_sttp_flatten (f' (ST, LT)) ! length ([LitPush (Bool False)] @ compExpr jmb expr)) =
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2051
      (Some (PrimT Boolean # PrimT Boolean # ST, LT))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2052
      apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2053
     apply (simp (no_asm_simp)) apply (rule trans, rule mt_sttp_flatten_comb_length)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2054
       apply (rule HOL.refl) apply (simp (no_asm_simp) add: length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2055
     apply (simp (no_asm_simp) add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2056
     apply (simp only: compTpExpr_LT_ST_rewr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2057
    (* contracting\<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2058
    apply (rule contracting_popST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2059
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2060
   apply (drule_tac ?bc1.0="[LitPush (Bool False)] @ compExpr jmb expr @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2061
                            [Ifcmpeq (2 + int (length (compStmt jmb stmt1)))] "
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2062
                and ?bc2.0 = "compStmt jmb stmt1"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2063
                and ?bc3.0="Goto (1 + int (length (compStmt jmb stmt2))) # compStmt jmb stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2064
                and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr \<box> popST 2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2065
                and ?f2.0 = "compTpStmt jmb G stmt1"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2066
                and ?f3.0="nochangeST \<box> compTpStmt jmb G stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2067
                 in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2068
           apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2069
       apply (simp (no_asm_simp) add: pushST_def popST_def compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2070
       apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2071
       apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2072
      apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2073
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2074
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2075
   apply (drule_tac ?bc1.0 = "[LitPush (Bool False)] @ compExpr jmb expr @ [Ifcmpeq (2 + int (length (compStmt jmb stmt1)))] @ compStmt jmb stmt1"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2076
                and inst = "Goto (1 + int (length (compStmt jmb stmt2)))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2077
                and ?bc3.0 = "compStmt jmb stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2078
                and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr \<box> popST 2 \<box> compTpStmt jmb G stmt1"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2079
                and ?f2.0 = "nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2080
                and ?f3.0="compTpStmt jmb G stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2081
                 in bc_mt_corresp_comb_wt_instr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2082
             apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2083
     apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2084
     apply (rule wt_instr_Goto)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2085
        apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2086
      apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2087
      (* \<dots> ! nat (int pc + i) = \<dots> ! pc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2088
      apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2089
      apply (simp (no_asm_simp) add: pushST_def popST_def nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2090
      apply (simp only: compTpExpr_LT_ST compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2091
      apply (simp (no_asm_simp) add: pushST_def popST_def nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2092
      apply (simp only: compTpExpr_LT_ST compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2093
     apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2094
     apply (simp add: length_compTpExpr length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2095
    apply (rule contracting_nochangeST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2096
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2097
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2098
   apply (drule_tac
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2099
           ?bc1.0= "[LitPush (Bool False)] @ compExpr jmb expr @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2100
                    [Ifcmpeq (2 + int (length (compStmt jmb stmt1)))] @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2101
                    compStmt jmb stmt1 @ [Goto (1 + int (length (compStmt jmb stmt2)))]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2102
           and ?bc2.0 = "compStmt jmb stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2103
           and ?bc3.0="[]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2104
           and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr \<box> popST 2 \<box> compTpStmt jmb G stmt1 \<box> nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2105
           and ?f2.0 = "compTpStmt jmb G stmt2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2106
           and ?f3.0="comb_nil"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2107
           in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2108
           apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2109
       apply (simp (no_asm_simp) add: pushST_def popST_def nochangeST_def compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2110
       apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2111
       apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2112
       apply (simp only: compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2113
      apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2114
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2115
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2116
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2117
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2118
  (* Loop *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2119
  apply (intro allI impI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2120
  apply (simp (no_asm_simp) only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2121
  apply (drule Loop_invers, (erule conjE)+)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2122
  apply (simp (no_asm_simp))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2123
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2124
  apply (subgoal_tac "bc_mt_corresp bc' f' (ST, LT) (comp G) rT (length LT) 0")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2125
   prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2126
   apply (rule bc_mt_corresp_zero)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2127
    apply (simp (no_asm_simp) add: length_compTpStmt length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2128
   apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2129
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2130
  apply (rename_tac expr stmt ST LT bc' f')
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2131
  apply (drule_tac ?bc1.0="[]" and ?bc2.0 = "[LitPush (Bool False)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2132
               and ?bc3.0="compExpr jmb expr @ Ifcmpeq (2 + int (length (compStmt jmb stmt))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2133
                           compStmt jmb stmt @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2134
                           [Goto (-2 + (- int (length (compStmt jmb stmt)) - int (length (compExpr jmb expr))))]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2135
               and ?f1.0=comb_nil and ?f2.0 = "pushST [PrimT Boolean]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2136
               and ?f3.0="compTpExpr jmb G expr \<box> popST 2 \<box> compTpStmt jmb G stmt \<box> nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2137
                in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2138
          apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2139
      apply (rule_tac T="(PrimT Boolean)" in bc_mt_corresp_LitPush)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2140
      apply (simp (no_asm_simp) add: start_sttp_resp_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2141
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2142
  apply (drule_tac ?bc1.0="[LitPush (Bool False)]" and ?bc2.0 = "compExpr jmb expr"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2143
               and ?bc3.0="Ifcmpeq (2 + int (length (compStmt jmb stmt))) #
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2144
                           compStmt jmb stmt @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2145
                           [Goto (-2 + (- int (length (compStmt jmb stmt)) - int (length (compExpr jmb expr))))]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2146
               and ?f1.0="pushST [PrimT Boolean]" and ?f2.0 = "compTpExpr jmb G expr"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2147
               and ?f3.0="popST 2 \<box> compTpStmt jmb G stmt \<box> nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2148
                in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2149
          apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2150
      apply (simp (no_asm_simp)  add: pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2151
      apply (rule  wt_method_compTpExpr_corresp, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2152
       apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2153
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2154
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2155
  apply (drule_tac ?bc1.0 = "[LitPush (Bool False)] @ compExpr jmb expr"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2156
               and inst = "Ifcmpeq (2 + int (length (compStmt jmb stmt)))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2157
               and ?bc3.0 = "compStmt jmb stmt @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2158
                             [Goto (-2 + (- int (length (compStmt jmb stmt)) - int (length (compExpr jmb expr))))]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2159
               and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr" and ?f2.0 = "popST 2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2160
               and ?f3.0="compTpStmt jmb G stmt \<box> nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2161
                in bc_mt_corresp_comb_wt_instr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2162
            apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2163
     apply (simp (no_asm_simp) add: start_sttp_resp_comb)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2164
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2165
    (* wt_instr *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2166
    apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2167
    apply (rule_tac ts="PrimT Boolean" and ts'="PrimT Boolean"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2168
          and ST=ST and LT=LT
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2169
          in wt_instr_Ifcmpeq)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2170
          apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2171
         apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2172
       apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2173
       (* current pc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2174
       apply (simp add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2175
      apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2176
      (* Suc pc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2177
      apply (simp add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2178
      apply (simp add: popST_def start_sttp_resp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2179
     (* jump goal *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2180
     apply (simp (no_asm_simp) only: int_outside_right nat_int, simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2181
     apply (simp add: length_compTpExpr pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2182
     apply (simp add: popST_def start_sttp_resp_comb length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2183
     apply (simp only: compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2184
     apply (simp add: nochangeST_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2185
    (* check_type *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2186
    apply (subgoal_tac "
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2187
     (mt_sttp_flatten (f' (ST, LT)) ! length ([LitPush (Bool False)] @ compExpr jmb expr)) =
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2188
     (Some (PrimT Boolean # PrimT Boolean # ST, LT))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2189
     apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2190
    apply (simp (no_asm_simp)) apply (rule trans, rule mt_sttp_flatten_comb_length)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2191
      apply (rule HOL.refl) apply (simp (no_asm_simp) add: length_compTpExpr)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2192
    apply (simp (no_asm_simp) add: length_compTpExpr pushST_def)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2193
    apply (simp only: compTpExpr_LT_ST_rewr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2194
   (* contracting\<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2195
   apply (rule contracting_popST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2196
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2197
  apply (drule_tac
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2198
          ?bc1.0="[LitPush (Bool False)] @ compExpr jmb expr @
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2199
                  [Ifcmpeq (2 + int (length (compStmt jmb stmt)))] "
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2200
          and ?bc2.0 = "compStmt jmb stmt"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2201
          and ?bc3.0="[Goto (-2 + (- int (length (compStmt jmb stmt)) - int (length (compExpr jmb expr))))]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2202
          and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr \<box> popST 2"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2203
          and ?f2.0 = "compTpStmt jmb G stmt"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2204
          and ?f3.0="nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2205
          in bc_mt_corresp_comb_inside)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2206
          apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2207
      apply (simp (no_asm_simp) add: pushST_def popST_def compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2208
      apply (simp only: compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2209
      apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2210
     apply (simp (no_asm_simp) add: length_compTpExpr)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2211
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2212
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2213
  apply (drule_tac ?bc1.0 = "[LitPush (Bool False)] @ compExpr jmb expr @ [Ifcmpeq (2 + int (length (compStmt jmb stmt)))] @ compStmt jmb stmt"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2214
            and inst = "Goto (-2 + (- int (length (compStmt jmb stmt)) - int (length (compExpr jmb expr))))"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2215
            and ?bc3.0 = "[]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2216
            and ?f1.0="pushST [PrimT Boolean] \<box> compTpExpr jmb G expr \<box> popST 2 \<box> compTpStmt jmb G stmt"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2217
            and ?f2.0 = "nochangeST"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2218
            and ?f3.0="comb_nil"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2219
            in bc_mt_corresp_comb_wt_instr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2220
            apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2221
    apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2222
    apply (rule wt_instr_Goto)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2223
       apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2224
      apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2225
     (* \<dots> ! nat (int pc + i) = \<dots> ! pc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2226
     apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2227
     apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2228
     apply (simp (no_asm_simp) add: pushST_def popST_def nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2229
     apply (simp only: compTpExpr_LT_ST compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2230
     apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2231
     apply (simp only: compTpExpr_LT_ST compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2232
    apply (simp (no_asm_simp) add: pushST_def popST_def nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2233
    apply (simp (no_asm_simp) add: length_compTpExpr length_compTpStmt)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2234
    apply (simp only: compTpExpr_LT_ST compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2235
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2236
    apply (simp add: length_compTpExpr length_compTpStmt) (* check_type *)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2237
    apply (simp add: pushST_def popST_def compTpExpr_LT_ST compTpStmt_LT_ST)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2238
   apply (rule contracting_nochangeST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2239
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2240
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2241
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2242
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2243
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2244
  (**********************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2245
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2246
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2247
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2248
lemma wt_method_compTpInit_corresp: "\<lbrakk> jmb = (pns,lvars,blk,res); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2249
  wf_java_mdecl G C ((mn, pTs), rT, jmb); mxr = length LT;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2250
  length LT = (length pns) + (length lvars) + 1;  vn \<in> set (map fst lvars);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2251
  bc = (compInit jmb (vn,ty)); f = (compTpInit jmb (vn,ty));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2252
  is_type G ty \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2253
  \<Longrightarrow> bc_mt_corresp bc f (ST, LT) (comp G) rT mxr (length bc)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2254
  apply (simp add: compInit_def compTpInit_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2255
  apply (rule_tac ?bc1.0="[load_default_val ty]" and ?bc2.0="[Store (index jmb vn)]"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2256
      in bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2257
      apply simp+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2258
    apply (simp add: load_default_val_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2259
    apply (rule typeof_default_val [THEN exE])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2260
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2261
    apply (rule bc_mt_corresp_LitPush_CT, assumption)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2262
    apply (simp add: comp_is_type)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2263
   apply (simp add: pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2264
   apply (rule bc_mt_corresp_Store_init)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2265
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2266
   apply (rule index_length_lvars [THEN conjunct2])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2267
     apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2268
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2269
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2270
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2271
lemma wt_method_compTpInitLvars_corresp_aux [rule_format (no_asm)]: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2272
  \<forall> lvars_pre lvars0 ST LT.
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2273
  jmb = (pns,lvars0,blk,res) \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2274
  lvars0 = (lvars_pre @ lvars) \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2275
  length LT = (length pns) + (length lvars0) + 1 \<and>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2276
  wf_java_mdecl G C ((mn, pTs), rT, jmb)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2277
 \<longrightarrow> bc_mt_corresp (compInitLvars jmb lvars) (compTpInitLvars jmb lvars) (ST, LT) (comp G) rT 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2278
       (length LT) (length (compInitLvars jmb lvars))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2279
  apply (induct lvars)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2280
   apply (simp add: compInitLvars_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2281
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2282
  apply (intro strip, (erule conjE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2283
  apply (subgoal_tac "\<exists> vn ty. a = (vn, ty)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2284
   prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2285
   apply (simp (no_asm_simp))
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2286
  apply ((erule exE)+, simp (no_asm_simp))
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2287
  apply (drule_tac x="lvars_pre @ [a]" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2288
  apply (drule_tac x="lvars0" in spec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2289
  apply (simp (no_asm_simp) add: compInitLvars_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2290
  apply (rule_tac ?bc1.0="compInit jmb a" and ?bc2.0="compInitLvars jmb lvars"
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2291
      in bc_mt_corresp_comb)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2292
      apply (simp (no_asm_simp) add: compInitLvars_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2293
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2294
    apply (rule_tac vn=vn and ty=ty in wt_method_compTpInit_corresp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2295
           apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2296
         apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2297
    apply (simp add: wf_java_mdecl_def)     (* is_type G ty *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2298
   apply (simp add: compTpInit_def storeST_def pushST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2299
  apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2300
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2301
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2302
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2303
lemma wt_method_compTpInitLvars_corresp: "\<lbrakk> jmb = (pns,lvars,blk,res); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2304
  wf_java_mdecl G C ((mn, pTs), rT, jmb);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2305
  length LT = (length pns) + (length lvars) + 1; mxr = (length LT);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2306
  bc = (compInitLvars jmb lvars); f= (compTpInitLvars jmb lvars) \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2307
  \<Longrightarrow> bc_mt_corresp bc f (ST, LT) (comp G) rT mxr (length bc)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2308
  apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2309
  apply (subgoal_tac "bc_mt_corresp (compInitLvars (pns, lvars, blk, res) lvars)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2310
            (compTpInitLvars (pns, lvars, blk, res) lvars) (ST, LT) (TranslComp.comp G) rT
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2311
            (length LT) (length (compInitLvars (pns, lvars, blk, res) lvars))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2312
   apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2313
  apply (rule_tac lvars_pre="[]" in wt_method_compTpInitLvars_corresp_aux)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2314
  apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2315
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2316
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2317
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2318
  (**********************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2319
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2320
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2321
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2322
lemma wt_method_comp_wo_return: "\<lbrakk> wf_prog wf_java_mdecl G;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2323
  wf_java_mdecl G C ((mn, pTs), rT, jmb); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2324
  bc = compInitLvars jmb lvars @ compStmt jmb blk @ compExpr jmb res;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2325
  jmb = (pns,lvars,blk,res); 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2326
  f = (compTpInitLvars jmb lvars \<box> compTpStmt jmb G blk \<box> compTpExpr jmb G res);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2327
  sttp = (start_ST, start_LT C pTs (length lvars));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2328
  li = (length (inited_LT C pTs lvars))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2329
  \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2330
\<Longrightarrow> bc_mt_corresp bc f sttp (comp G) rT  li (length bc)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2331
  apply (subgoal_tac "\<exists>E. (E = (local_env G C (mn, pTs) pns lvars) \<and> E \<turnstile> blk \<surd> \<and>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2332
                          (\<exists>T. E\<turnstile>res::T \<and> G\<turnstile>T\<preceq>rT))")
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2333
   apply (erule exE, (erule conjE)+)+
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2334
   apply (simp only:)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2335
   apply (rule bc_mt_corresp_comb, (rule HOL.refl)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2336
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2337
     (* InitLvars *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2338
     apply (rule wt_method_compTpInitLvars_corresp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2339
          apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2340
         apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2341
        apply (simp (no_asm_simp) add: start_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2342
        apply (rule wf_java_mdecl_length_pTs_pns, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2343
       apply (simp (no_asm_simp) only: start_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2344
       apply (simp (no_asm_simp) add: inited_LT_def)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2345
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2346
    apply (rule bc_mt_corresp_comb, (rule HOL.refl)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2347
       apply (simp (no_asm_simp) add: compTpInitLvars_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2348
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2349
      (* stmt *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2350
      apply (simp only: compTpInitLvars_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2351
      apply (subgoal_tac "(Suc (length pTs + length lvars)) = (length (inited_LT C pTs lvars))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2352
       prefer 2 apply (simp (no_asm_simp) add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2353
      apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2354
      apply (rule_tac s=blk in wt_method_compTpStmt_corresp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2355
             apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2356
           apply (simp only:)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2357
        apply (simp (no_asm_simp) add: is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2358
       apply (simp only:)+
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2359
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2360
     (* expr *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2361
     apply (simp only: compTpInitLvars_LT_ST compTpStmt_LT_ST is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2362
     apply (subgoal_tac "(Suc (length pTs + length lvars)) = (length (inited_LT C pTs lvars))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2363
      prefer 2 apply (simp (no_asm_simp) add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2364
     apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2365
     apply (rule_tac ex=res in wt_method_compTpExpr_corresp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2366
            apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2367
          apply (simp only:)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2368
       apply (simp (no_asm_simp) add: is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2369
      apply (simp only:)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2370
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2371
    (* start_sttp_resp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2372
    apply (simp add: start_sttp_resp_comb)+
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2373
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2374
  (* subgoal *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2375
  apply (simp add: wf_java_mdecl_def local_env_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2376
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2377
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2378
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2379
  (**********************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2380
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2381
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2382
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2383
lemma check_type_start:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2384
  "\<lbrakk> wf_mhead cG (mn, pTs) rT; is_class cG C\<rbrakk>
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2385
  \<Longrightarrow> check_type cG (length start_ST) (Suc (length pTs + mxl))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2386
              (OK (Some (start_ST, start_LT C pTs mxl)))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2387
  apply (simp add: check_type_def wf_mhead_def start_ST_def start_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2388
  apply (simp add: check_type_simps)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2389
  apply (simp only: list_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2390
  apply (auto simp: err_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2391
  done
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2392
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2393
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2394
lemma wt_method_comp_aux:
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2395
  "\<lbrakk> bc' = bc @ [Return]; f' = (f \<box> nochangeST);
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2396
  bc_mt_corresp bc f sttp0 cG rT (1+length pTs+mxl) (length bc);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2397
  start_sttp_resp_cons f';
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2398
  sttp0 = (start_ST, start_LT C pTs mxl);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2399
  mxs = max_ssize (mt_of (f' sttp0));
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2400
  wf_mhead cG (mn, pTs) rT; is_class cG C;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2401
  sttp_of (f sttp0) = (T # ST, LT);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2402
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2403
  check_type cG mxs (1+length pTs+mxl) (OK (Some (T # ST, LT))) \<longrightarrow>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2404
  wt_instr_altern Return cG rT (mt_of (f' sttp0)) mxs (1+length pTs+mxl) 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2405
         (Suc (length bc)) empty_et (length bc)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2406
\<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2407
\<Longrightarrow> wt_method_altern cG C pTs rT mxs mxl bc' empty_et (mt_of (f' sttp0))"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2408
  apply (subgoal_tac "check_type cG (length start_ST) (Suc (length pTs + mxl))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2409
                                    (OK (Some (start_ST, start_LT C pTs mxl)))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2410
   apply (subgoal_tac "check_type cG mxs (1+length pTs+mxl) (OK (Some (T # ST, LT)))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2411
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2412
    apply (simp add: wt_method_altern_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2413
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2414
    (* length (.. f ..) = length bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2415
    apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2416
     apply (simp add: bc_mt_corresp_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2417
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2418
    (* check_bounded *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2419
    apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2420
     apply (simp add: bc_mt_corresp_def split_beta check_bounded_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2421
     apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2422
     apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2423
     apply (subgoal_tac "pc < (length bc) \<or> pc = length bc")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2424
      apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2425
       (* case  pc < length bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2426
       apply (subgoal_tac "(bc' ! pc) = (bc ! pc)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2427
        apply (simp add: wt_instr_altern_def eff_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2428
       (* subgoal *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2429
       apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2430
      (* case  pc = length bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2431
      apply (subgoal_tac "(bc' ! pc) = Return")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2432
       apply (simp add: wt_instr_altern_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2433
      (* subgoal *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2434
      apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2435
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2436
     (* subgoal pc < length bc \<or> pc = length bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2437
     apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2438
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2439
    (* wt_start *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2440
    apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2441
     apply (simp add: wt_start_def start_sttp_resp_cons_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2442
     apply (drule_tac x=sttp0 in spec) apply (erule exE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2443
     apply (simp add: mt_sttp_flatten_def start_ST_def start_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2444
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2445
    (* wt_instr *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2446
    apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2447
    apply (subgoal_tac "pc < (length bc) \<or> pc = length bc")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2448
     apply (erule disjE)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2449
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2450
      (* pc < (length bc) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2451
      apply (simp (no_asm_use) add: bc_mt_corresp_def mt_sttp_flatten_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2452
      apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2453
      apply (drule mp, assumption)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2454
      apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2455
      apply (drule spec, drule mp, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2456
      apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2457
      apply (simp (no_asm_simp) add: comb_def split_beta nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2458
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2459
     (* pc = length bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2460
     apply (simp add: nth_append)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2461
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2462
    (* subgoal pc < (length bc) \<or> pc = length bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2463
    apply arith
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2464
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2465
   (* subgoals *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2466
   apply (simp (no_asm_use) add: bc_mt_corresp_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2467
   apply (subgoal_tac "check_type cG (length (fst sttp0)) (Suc (length pTs + mxl))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2468
                                     (OK (Some sttp0))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2469
    apply ((erule conjE)+, drule mp, assumption)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2470
    apply (simp add: nth_append)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2471
    apply (simp (no_asm_simp) add: comb_def nochangeST_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2472
   apply (simp (no_asm_simp))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2473
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2474
  apply (rule check_type_start, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2475
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2476
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2477
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2478
lemma wt_instr_Return: "\<lbrakk>fst f ! pc = Some (T # ST, LT); (G \<turnstile> T \<preceq> rT); pc < max_pc;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2479
  check_type (TranslComp.comp G) mxs mxr (OK (Some (T # ST, LT)))
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2480
  \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2481
  \<Longrightarrow> wt_instr_altern Return (comp G) rT  (mt_of f) mxs mxr max_pc empty_et pc"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2482
  apply (case_tac "(mt_of f ! pc)")
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2483
   apply (simp  add: wt_instr_altern_def eff_def norm_eff_def app_def)+
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2484
  apply (drule sym)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2485
  apply (simp add: comp_widen xcpt_app_def)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2486
  done
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2487
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2488
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2489
theorem wt_method_comp: "
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2490
  \<lbrakk> wf_java_prog G; (C, D, fds, mths) \<in> set G; jmdcl \<in> set mths;
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2491
  jmdcl = ((mn,pTs), rT, jmb);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2492
  mt = (compTpMethod G C jmdcl);
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2493
  (mxs, mxl, bc, et) = mtd_mb (compMethod G C jmdcl) \<rbrakk>
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2494
  \<Longrightarrow> wt_method (comp G) C pTs rT mxs mxl bc et mt"
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2495
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2496
  (* show statement for wt_method_altern *)
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2497
  apply (rule wt_method_altern_wt_method)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2498
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2499
  apply (subgoal_tac "wf_java_mdecl G C jmdcl")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2500
   apply (subgoal_tac "wf_mhead G (mn, pTs) rT")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2501
    apply (subgoal_tac "is_class G C")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2502
     apply (subgoal_tac "\<forall>jmb. \<exists> pns lvars blk res. jmb = (pns, lvars, blk, res)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2503
      apply (drule_tac x=jmb in spec, (erule exE)+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2504
      apply (subgoal_tac "\<exists>E. (E = (local_env G C (mn, pTs) pns lvars) \<and> E \<turnstile> blk \<surd> \<and>
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2505
                              (\<exists>T. E\<turnstile>res::T \<and> G\<turnstile>T\<preceq>rT))")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2506
       apply (erule exE, (erule conjE)+)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2507
       apply (simp add: compMethod_def compTpMethod_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2508
       apply (rule_tac T=T and LT="inited_LT C pTs lvars" and ST=start_ST in wt_method_comp_aux)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2509
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2510
                (* bc *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2511
                apply (simp only: append_assoc [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2512
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2513
               (* comb *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2514
               apply (simp only: comb_assoc [symmetric])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2515
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2516
              (* bc_corresp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2517
              apply (rule wt_method_comp_wo_return)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2518
                    apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2519
                  apply (simp (no_asm_use) only: append_assoc)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2520
                 apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2521
                apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2522
              apply (simp (no_asm_simp) add: inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2523
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2524
             (* start_sttp_resp *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2525
             apply (simp add: start_sttp_resp_cons_comb_cons_r)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2526
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2527
          (* wf_mhead / is_class *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2528
          apply (simp add: wf_mhead_def comp_is_type)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2529
         apply (simp add: comp_is_class)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2530
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2531
        (* sttp_of .. = (T # ST, LT) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2532
        apply (simp (no_asm_simp) add: compTpInitLvars_LT_ST compTpExpr_LT_ST compTpStmt_LT_ST is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2533
       apply (subgoal_tac "(snd (compTpInitLvars (pns, lvars, blk, res) lvars
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2534
                            (start_ST, start_LT C pTs (length lvars))))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2535
                           = (start_ST, inited_LT C pTs lvars)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2536
        prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2537
        apply (rule compTpInitLvars_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2538
         apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2539
        apply assumption
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2540
       apply (subgoal_tac "(snd (compTpStmt (pns, lvars, blk, res) G blk
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2541
                            (start_ST, inited_LT C pTs lvars)))
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2542
                            = (start_ST, inited_LT C pTs lvars)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2543
        prefer 2 apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2544
        apply (rule compTpStmt_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2545
             apply (rule HOL.refl)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2546
            apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2547
         apply (simp only:)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2548
        apply (simp (no_asm_simp) add: is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2549
       apply (simp (no_asm_simp) add: is_inited_LT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2550
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2551
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2552
       (* Return *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2553
       apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2554
       apply (rule_tac T=T and ST=start_ST and LT="inited_LT C pTs lvars" in wt_instr_Return)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2555
          apply (simp (no_asm_simp) add: nth_append length_compTpInitLvars length_compTpStmt length_compTpExpr)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2556
          apply (simp only: compTpInitLvars_LT_ST compTpStmt_LT_ST compTpExpr_LT_ST nochangeST_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2557
          apply (simp only: is_inited_LT_def compTpStmt_LT_ST compTpExpr_LT_ST)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2558
          apply (simp (no_asm_simp))+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2559
      apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2560
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2561
      (* subgoal \<exists> E. \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2562
      apply (simp add: wf_java_mdecl_def local_env_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2563
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2564
     (* subgoal jmb = (\<dots>) *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2565
     apply (simp only: split_paired_All, simp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2566
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2567
    (* subgoal is_class / wf_mhead / wf_java_mdecl *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2568
    apply (blast intro: methd [THEN conjunct2])
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2569
   apply (frule wf_prog_wf_mdecl, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2570
    apply (simp only:)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2571
   apply (simp add: wf_mdecl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2572
  apply (rule wf_java_prog_wf_java_mdecl, assumption+)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2573
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2574
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2575
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2576
lemma comp_set_ms: "(C, D, fs, cms)\<in>set (comp G) 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2577
  \<Longrightarrow> \<exists> ms. (C, D, fs, ms) \<in>set G   \<and> cms = map (compMethod G C) ms"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2578
  by (auto simp: comp_def compClass_def)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2579
14045
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  2580
a34d89ce6097 Introduced distinction wf_prog vs. ws_prog
streckem
parents: 14025
diff changeset
  2581
  (* ---------------------------------------------------------------------- *)
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2582
58886
8a6cac7c7247 modernized header;
wenzelm
parents: 58263
diff changeset
  2583
subsection "Main Theorem"
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2584
  (* MAIN THEOREM: 
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2585
  Methodtype computed by comp is correct for bytecode generated by compTp *)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2586
theorem wt_prog_comp: "wf_java_prog G  \<Longrightarrow> wt_jvm_prog (comp G) (compTp G)"
60304
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2587
  apply (simp add: wf_prog_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2588
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2589
  apply (subgoal_tac "wf_java_prog G")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2590
   prefer 2
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2591
   apply (simp add: wf_prog_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2592
  apply (simp (no_asm_simp) add: wf_prog_def wt_jvm_prog_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2593
  apply (simp add: comp_ws_prog)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2594
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2595
  apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2596
  apply (subgoal_tac "\<exists>C D fs cms. c = (C, D, fs, cms)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2597
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2598
   apply (frule comp_set_ms)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2599
   apply clarify
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2600
   apply (drule bspec, assumption)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2601
   apply (rule conjI)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2602
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2603
    (* wf_mrT *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2604
    apply (case_tac "C = Object")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2605
     apply (simp add: wf_mrT_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2606
    apply (subgoal_tac "is_class G D")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2607
     apply (simp add: comp_wf_mrT)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2608
    apply (simp add: wf_prog_def ws_prog_def ws_cdecl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2609
    apply blast
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2610
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2611
   (* wf_cdecl_mdecl *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2612
   apply (simp add: wf_cdecl_mdecl_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2613
   apply (simp add: split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2614
   apply (intro strip)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2615
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2616
   (* show wt_method \<dots> *)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2617
   apply (subgoal_tac "\<exists>sig rT mb. x = (sig, rT, mb)")
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2618
    apply (erule exE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2619
    apply (simp (no_asm_simp) add: compMethod_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2620
    apply (erule conjE)+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2621
    apply (drule_tac x="(sig, rT, mb)" in bspec)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2622
     apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2623
    apply (rule_tac mn="fst sig" and pTs="snd sig" in wt_method_comp)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2624
         apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2625
      apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2626
     apply (simp (no_asm_simp) add: compTp_def)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2627
     apply (simp (no_asm_simp) add: compMethod_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2628
     apply (frule WellForm.methd) apply assumption+
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2629
      apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2630
     apply simp
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2631
    apply (simp add: compMethod_def split_beta)
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2632
   apply auto
3f429b7d8eb5 modernized (slightly) type compiler in MicroJava
kleing
parents: 59199
diff changeset
  2633
  done
13673
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2634
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2635
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2636
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2637
  (**********************************************************************************)
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2638
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2639
declare split_paired_All [simp add]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2640
declare split_paired_Ex [simp add]
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2641
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2642
2950128b8206 First checkin of compiler
streckem
parents:
diff changeset
  2643
end