src/HOL/Imperative_HOL/Ref.thy
changeset 37806 a7679be14442
parent 37805 0f797d586ce5
child 37830 01d308b00bcf
equal deleted inserted replaced
37805:0f797d586ce5 37806:a7679be14442
   216   by (rule Heap_eqI) (simp add: change_def lookup_chain)
   216   by (rule Heap_eqI) (simp add: change_def lookup_chain)
   217 
   217 
   218 
   218 
   219 text {* Non-interaction between imperative array and imperative references *}
   219 text {* Non-interaction between imperative array and imperative references *}
   220 
   220 
   221 lemma get_array_set [simp]:
   221 lemma array_get_set [simp]:
   222   "get_array (set r v h) = get_array h"
   222   "Array.get (set r v h) = Array.get h"
   223   by (simp add: get_array_def set_def expand_fun_eq)
   223   by (simp add: Array.get_def set_def expand_fun_eq)
   224 
   224 
   225 lemma get_update [simp]:
   225 lemma get_update [simp]:
   226   "get (Array.update a i v h) r = get h r"
   226   "get (Array.update a i v h) r = get h r"
   227   by (simp add: get_def Array.update_def Array.set_def)
   227   by (simp add: get_def Array.update_def Array.set_def)
   228 
   228 
   229 lemma alloc_update:
   229 lemma alloc_update:
   230   "fst (alloc v (Array.update a i v' h)) = fst (alloc v h)"
   230   "fst (alloc v (Array.update a i v' h)) = fst (alloc v h)"
   231   by (simp add: Array.update_def get_array_def Array.set_def alloc_def Let_def)
   231   by (simp add: Array.update_def Array.get_def Array.set_def alloc_def Let_def)
   232 
   232 
   233 lemma update_set_swap:
   233 lemma update_set_swap:
   234   "Array.update a i v (set r v' h) = set r v' (Array.update a i v h)"
   234   "Array.update a i v (set r v' h) = set r v' (Array.update a i v h)"
   235   by (simp add: Array.update_def get_array_def Array.set_def set_def)
   235   by (simp add: Array.update_def Array.get_def Array.set_def set_def)
   236 
   236 
   237 lemma length_alloc [simp]: 
   237 lemma length_alloc [simp]: 
   238   "Array.length (snd (alloc v h)) a = Array.length h a"
   238   "Array.length (snd (alloc v h)) a = Array.length h a"
   239   by (simp add: Array.length_def get_array_def alloc_def set_def Let_def)
   239   by (simp add: Array.length_def Array.get_def alloc_def set_def Let_def)
   240 
   240 
   241 lemma get_array_alloc [simp]: 
   241 lemma array_get_alloc [simp]: 
   242   "get_array (snd (alloc v h)) = get_array h"
   242   "Array.get (snd (alloc v h)) = Array.get h"
   243   by (simp add: get_array_def alloc_def set_def Let_def expand_fun_eq)
   243   by (simp add: Array.get_def alloc_def set_def Let_def expand_fun_eq)
   244 
   244 
   245 lemma present_update [simp]: 
   245 lemma present_update [simp]: 
   246   "present (Array.update a i v h) = present h"
   246   "present (Array.update a i v h) = present h"
   247   by (simp add: Array.update_def Array.set_def expand_fun_eq present_def)
   247   by (simp add: Array.update_def Array.set_def expand_fun_eq present_def)
   248 
   248