63 lines
2.5 KiB
Plaintext
63 lines
2.5 KiB
Plaintext
(*
|
|
* Copyright 2016, Data61
|
|
*
|
|
* This software may be distributed and modified according to the terms of
|
|
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
|
|
* See "LICENSE_BSD2.txt" for details.
|
|
*
|
|
* @TAG(NICTA_BSD)
|
|
*)
|
|
|
|
theory AsmSemanticsRespects
|
|
|
|
imports "GlobalsSwap"
|
|
|
|
begin
|
|
|
|
definition
|
|
asm_semantics_protects_globs
|
|
:: "('g \<Rightarrow> heap_raw_state) \<Rightarrow> ((heap_raw_state \<Rightarrow> heap_raw_state) \<Rightarrow> 'g \<Rightarrow> 'g)
|
|
\<Rightarrow> ('g \<Rightarrow> 'a)
|
|
\<Rightarrow> (string \<Rightarrow> addr) \<Rightarrow> ('g global_data list)
|
|
\<Rightarrow> bool"
|
|
where
|
|
"asm_semantics_protects_globs mem memu ms symtab xs
|
|
\<equiv> (let sw = globals_swap mem memu symtab xs
|
|
in (\<forall>v v' s m' ms' specname. (v', m', ms')
|
|
\<in> asm_semantics specname v
|
|
(hrs_mem (mem (sw s)), ms s)
|
|
\<longrightarrow> const_globals_in_memory symtab xs
|
|
(hrs_mem (mem (sw (sw s))))
|
|
\<longrightarrow> const_globals_in_memory symtab xs
|
|
(hrs_mem (mem (sw (memu (hrs_mem_update (\<lambda>_. m')) (sw s)))))))"
|
|
|
|
abbreviation(input)
|
|
asm_ops_are_swap
|
|
:: "('g \<Rightarrow> heap_raw_state) \<Rightarrow> ((heap_raw_state \<Rightarrow> heap_raw_state) \<Rightarrow> 'g \<Rightarrow> 'g)
|
|
\<Rightarrow> ('g \<Rightarrow> 'a) \<Rightarrow> (('a \<Rightarrow> 'a) \<Rightarrow> 'g \<Rightarrow> 'g)
|
|
\<Rightarrow> (string \<Rightarrow> addr) \<Rightarrow> ('g \<Rightarrow> 'b) \<Rightarrow> ('g global_data list)
|
|
\<Rightarrow> bool"
|
|
where
|
|
"asm_ops_are_swap mem memu ms msu symtab gdata xs
|
|
\<equiv> (let sw = globals_swap mem memu symtab xs
|
|
in (\<forall>s. asm_fetch s = (hrs_mem (mem (sw s)), ms (sw s)))
|
|
\<and> (\<forall>v s. asm_store gdata v s = sw (msu (\<lambda>_. snd v)
|
|
(memu (hrs_mem_update (\<lambda>_. fst v)) (sw s))))
|
|
\<and> asm_semantics_protects_globs mem memu ms symtab xs)"
|
|
|
|
lemma asm_semantics_protects_globs_revD[OF refl]:
|
|
"sw = globals_swap mem memu symtab xs
|
|
\<Longrightarrow> (v', m', ms')
|
|
\<in> asm_semantics specname v
|
|
(hrs_mem (mem (sw s)), ms s)
|
|
\<Longrightarrow> asm_semantics_protects_globs mem memu ms symtab xs
|
|
\<longrightarrow> const_globals_in_memory symtab xs
|
|
(hrs_mem (mem (sw (sw s))))
|
|
\<longrightarrow> const_globals_in_memory symtab xs
|
|
(hrs_mem (mem (sw (memu (hrs_mem_update (\<lambda>_. m')) (sw s)))))"
|
|
apply (simp add: asm_semantics_protects_globs_def Let_def)
|
|
apply blast
|
|
done
|
|
|
|
end
|