(* * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) * * SPDX-License-Identifier: BSD-2-Clause *) theory AsmSemanticsRespects imports "GlobalsSwap" begin definition asm_semantics_protects_globs :: "('g \ heap_raw_state) \ ((heap_raw_state \ heap_raw_state) \ 'g \ 'g) \ ('g \ 'a) \ (string \ addr) \ ('g global_data list) \ bool" where "asm_semantics_protects_globs mem memu ms symtab xs \ (let sw = globals_swap mem memu symtab xs in (\v v' s m' ms' specname. (v', m', ms') \ asm_semantics specname v (hrs_mem (mem (sw s)), ms s) \ const_globals_in_memory symtab xs (hrs_mem (mem (sw (sw s)))) \ const_globals_in_memory symtab xs (hrs_mem (mem (sw (memu (hrs_mem_update (\_. m')) (sw s)))))))" abbreviation(input) asm_ops_are_swap :: "('g \ heap_raw_state) \ ((heap_raw_state \ heap_raw_state) \ 'g \ 'g) \ ('g \ 'a) \ (('a \ 'a) \ 'g \ 'g) \ (string \ addr) \ ('g \ 'b) \ ('g global_data list) \ bool" where "asm_ops_are_swap mem memu ms msu symtab gdata xs \ (let sw = globals_swap mem memu symtab xs in (\s. asm_fetch s = (hrs_mem (mem (sw s)), ms (sw s))) \ (\v s. asm_store gdata v s = sw (msu (\_. snd v) (memu (hrs_mem_update (\_. fst v)) (sw s)))) \ asm_semantics_protects_globs mem memu ms symtab xs)" lemma asm_semantics_protects_globs_revD[OF refl]: "sw = globals_swap mem memu symtab xs \ (v', m', ms') \ asm_semantics specname v (hrs_mem (mem (sw s)), ms s) \ asm_semantics_protects_globs mem memu ms symtab xs \ const_globals_in_memory symtab xs (hrs_mem (mem (sw (sw s)))) \ const_globals_in_memory symtab xs (hrs_mem (mem (sw (memu (hrs_mem_update (\_. m')) (sw s)))))" apply (simp add: asm_semantics_protects_globs_def Let_def) apply blast done end