diff -r eec2582923f6 -r b95d12325b51 src/HOL/MicroJava/J/Conform.thy --- a/src/HOL/MicroJava/J/Conform.thy Mon Oct 21 17:23:23 2002 +0200 +++ b/src/HOL/MicroJava/J/Conform.thy Wed Oct 23 16:09:02 2002 +0200 @@ -6,7 +6,7 @@ header {* \isaheader{Conformity Relations for Type Soundness Proof} *} -theory Conform = State + WellType: +theory Conform = State + WellType + Exceptions: types 'c env_ = "'c prog \ (vname \ ty)" -- "same as @{text env} of @{text WellType.thy}" @@ -28,9 +28,14 @@ hconf :: "'c prog => aheap => bool" ("_ |-h _ [ok]" [51,51] 50) "G|-h h [ok] == \a obj. h a = Some obj --> G,h|-obj [ok]" + + xconf :: "aheap \ val option \ bool" + "xconf hp vo == preallocated hp \ (\ v. (vo = Some v) \ (\ xc. v = (Addr (XcptRef xc))))" - conforms :: "state => java_mb env_ => bool" ("_ ::<= _" [51,51] 50) - "s::<=E == prg E|-h heap s [ok] \ prg E,heap s|-locals s[::<=]localT E" + conforms :: "xstate => java_mb env_ => bool" ("_ ::<= _" [51,51] 50) + "s::<=E == prg E|-h heap (store s) [ok] \ + prg E,heap (store s)|-locals (store s)[::<=]localT E \ + xconf (heap (store s)) (abrupt s)" syntax (xsymbols) @@ -247,6 +252,12 @@ apply( auto simp add: length_Suc_conv) done +lemma lconf_restr: "\lT vn = None; G, h \ l [::\] lT(vn\T)\ \ G, h \ l [::\] lT" +apply (unfold lconf_def) +apply (intro strip) +apply (case_tac "n = vn") +apply auto +done section "oconf" @@ -277,29 +288,56 @@ done +section "xconf" + +lemma xconf_raise_if: "xconf h x \ xconf h (raise_if b xcn x)" +by (simp add: xconf_def raise_if_def) + + + section "conforms" -lemma conforms_heapD: "(h, l)::\(G, lT) ==> G\h h\" +lemma conforms_heapD: "(x, (h, l))::\(G, lT) ==> G\h h\" apply (unfold conforms_def) apply (simp) done -lemma conforms_localD: "(h, l)::\(G, lT) ==> G,h\l[::\]lT" +lemma conforms_localD: "(x, (h, l))::\(G, lT) ==> G,h\l[::\]lT" +apply (unfold conforms_def) +apply (simp) +done + +lemma conforms_xcptD: "(x, (h, l))::\(G, lT) ==> xconf h x" apply (unfold conforms_def) apply (simp) done -lemma conformsI: "[|G\h h\; G,h\l[::\]lT|] ==> (h, l)::\(G, lT)" +lemma conformsI: "[|G\h h\; G,h\l[::\]lT; xconf h x|] ==> (x, (h, l))::\(G, lT)" apply (unfold conforms_def) apply auto done -lemma conforms_hext: "[|(h,l)::\(G,lT); h\|h'; G\h h'\ |] ==> (h',l)::\(G,lT)" -apply( fast dest: conforms_localD elim!: conformsI lconf_hext) -done +lemma conforms_restr: "\lT vn = None; s ::\ (G, lT(vn\T)) \ \ s ::\ (G, lT)" +by (simp add: conforms_def, fast intro: lconf_restr) + +lemma conforms_xcpt_change: "\ (x, (h,l))::\ (G, lT); xconf h x \ xconf h x' \ \ (x', (h,l))::\ (G, lT)" +by (simp add: conforms_def) + + +lemma preallocated_hext: "\ preallocated h; h\|h'\ \ preallocated h'" +by (simp add: preallocated_def hext_def) + +lemma xconf_hext: "\ xconf h vo; h\|h'\ \ xconf h' vo" +by (simp add: xconf_def preallocated_def hext_def) + +lemma conforms_hext: "[|(x,(h,l))::\(G,lT); h\|h'; G\h h'\ |] + ==> (x,(h',l))::\(G,lT)" +by( fast dest: conforms_localD conforms_xcptD elim!: conformsI xconf_hext) + lemma conforms_upd_obj: - "[|(h,l)::\(G, lT); G,h(a\obj)\obj\; h\|h(a\obj)|] ==> (h(a\obj),l)::\(G, lT)" + "[|(x,(h,l))::\(G, lT); G,h(a\obj)\obj\; h\|h(a\obj)|] + ==> (x,(h(a\obj),l))::\(G, lT)" apply(rule conforms_hext) apply auto apply(rule hconfI) @@ -309,7 +347,8 @@ done lemma conforms_upd_local: -"[|(h, l)::\(G, lT); G,h\v::\T; lT va = Some T|] ==> (h, l(va\v))::\(G, lT)" +"[|(x,(h, l))::\(G, lT); G,h\v::\T; lT va = Some T|] + ==> (x,(h, l(va\v)))::\(G, lT)" apply (unfold conforms_def) apply( auto elim: lconf_upd) done