src/HOL/MicroJava/J/Exceptions.thy
author Christian Sternagel
Thu, 30 Aug 2012 15:44:03 +0900
changeset 49093 fdc301f592c4
parent 35416 d8d7d1b785af
child 61361 8b5f00202e1a
permissions -rw-r--r--
forgot to add lemmas
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/J/Exceptions.thy
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     2
    Author:     Gerwin Klein, Martin Strecker
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     3
    Copyright   2002 Technische Universitaet Muenchen
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     4
*)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     5
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13672
diff changeset
     6
theory Exceptions imports State begin
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     7
b95d12325b51 Added compiler
streckem
parents:
diff changeset
     8
text {* a new, blank object with default values in all fields: *}
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
     9
definition blank :: "'c prog \<Rightarrow> cname \<Rightarrow> obj" where
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    10
  "blank G C \<equiv> (C,init_vars (fields(G,C)))" 
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    11
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
    12
definition start_heap :: "'c prog \<Rightarrow> aheap" where
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    13
  "start_heap G \<equiv> empty (XcptRef NullPointer \<mapsto> blank G (Xcpt NullPointer))
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    14
                        (XcptRef ClassCast \<mapsto> blank G (Xcpt ClassCast))
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    15
                        (XcptRef OutOfMemory \<mapsto> blank G (Xcpt OutOfMemory))"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    16
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    17
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 30235
diff changeset
    18
abbreviation
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    19
  cname_of :: "aheap \<Rightarrow> val \<Rightarrow> cname"
35102
cc7a0b9f938c modernized translations;
wenzelm
parents: 30235
diff changeset
    20
  where "cname_of hp v == fst (the (hp (the_Addr v)))"
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    21
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    22
35416
d8d7d1b785af replaced a couple of constsdefs by definitions (also some old primrecs by modern ones)
haftmann
parents: 35102
diff changeset
    23
definition preallocated :: "aheap \<Rightarrow> bool" where
13672
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    24
  "preallocated hp \<equiv> \<forall>x. \<exists>fs. hp (XcptRef x) = Some (Xcpt x, fs)"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    25
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    26
lemma preallocatedD:
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    27
  "preallocated hp \<Longrightarrow> \<exists>fs. hp (XcptRef x) = Some (Xcpt x, fs)"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    28
  by (unfold preallocated_def) fast
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    29
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    30
lemma preallocatedE [elim?]:
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    31
  "preallocated hp \<Longrightarrow> (\<And>fs. hp (XcptRef x) = Some (Xcpt x, fs) \<Longrightarrow> P hp) \<Longrightarrow> P hp"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    32
  by (fast dest: preallocatedD)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    33
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    34
lemma cname_of_xcp:
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    35
  "raise_if b x None = Some xcp \<Longrightarrow> preallocated hp 
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    36
  \<Longrightarrow> cname_of (hp::aheap) xcp = Xcpt x"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    37
proof -
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    38
  assume "raise_if b x None = Some xcp"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    39
  hence "xcp = Addr (XcptRef x)"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    40
    by (simp add: raise_if_def split: split_if_asm)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    41
  moreover
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    42
  assume "preallocated hp" 
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    43
  then obtain fs where "hp (XcptRef x) = Some (Xcpt x, fs)" ..
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    44
  ultimately
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    45
  show ?thesis by simp
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    46
qed
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    47
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    48
lemma preallocated_start:
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    49
  "preallocated (start_heap G)"
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    50
  apply (unfold preallocated_def)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    51
  apply (unfold start_heap_def)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    52
  apply (rule allI)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    53
  apply (case_tac x)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    54
  apply (auto simp add: blank_def)
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    55
  done
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    56
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    57
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    58
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    59
end
b95d12325b51 Added compiler
streckem
parents:
diff changeset
    60