lh-l4v/proof/invariant-abstract/RISCV64/ArchDeterministic_AI.thy

88 lines
3.1 KiB
Plaintext

(*
* Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: GPL-2.0-only
*)
theory ArchDeterministic_AI
imports Deterministic_AI
begin
context Arch begin global_naming RISCV64
named_theorems Deterministic_AI_assms
crunch valid_list[wp, Deterministic_AI_assms]:
cap_swap_for_delete,set_cap,finalise_cap,arch_get_sanitise_register_info,
arch_post_modify_registers valid_list
(wp: crunch_wps simp: unless_def crunch_simps)
declare get_cap_inv[Deterministic_AI_assms]
end
global_interpretation Deterministic_AI_1?: Deterministic_AI_1
proof goal_cases
interpret Arch .
case 1 show ?case by (unfold_locales; (fact Deterministic_AI_assms)?)
qed
context Arch begin global_naming RISCV64
crunch valid_list[wp,Deterministic_AI_assms]: arch_invoke_irq_handler valid_list
crunch valid_list[wp]: invoke_untyped valid_list
(wp: crunch_wps preemption_point_inv' hoare_unless_wp mapME_x_wp'
simp: mapM_x_def_bak crunch_simps)
crunch valid_list[wp]: invoke_irq_control valid_list
lemma perform_page_table_invocation_valid_list[wp]:
"\<lbrace>valid_list\<rbrace> perform_page_table_invocation a \<lbrace>\<lambda>_.valid_list\<rbrace>"
unfolding perform_page_table_invocation_def
by (wpsimp wp: mapM_x_wp' simp: perform_pt_inv_map_def perform_pt_inv_unmap_def)
lemma perform_page_invocation_valid_list[wp]:
"\<lbrace>valid_list\<rbrace> perform_page_invocation a \<lbrace>\<lambda>_.valid_list\<rbrace>"
apply (simp add: perform_page_invocation_def)
apply (cases a, simp_all add: perform_pg_inv_map_def perform_pg_inv_unmap_def
perform_pg_inv_get_addr_def split_def)
apply (wp mapM_x_wp' mapM_wp' crunch_wps | intro impI conjI allI | wpc
| simp add: set_message_info_def set_mrs_def split: cap.splits arch_cap.splits)+
done
crunch valid_list[wp]: perform_invocation valid_list
(wp: crunch_wps simp: crunch_simps ignore: without_preemption)
crunch valid_list[wp, Deterministic_AI_assms]: handle_invocation valid_list
(wp: crunch_wps syscall_valid simp: crunch_simps
ignore: without_preemption syscall)
crunch valid_list[wp, Deterministic_AI_assms]: handle_recv, handle_yield, handle_call valid_list
(wp: crunch_wps simp: crunch_simps)
lemma handle_vm_fault_valid_list[wp, Deterministic_AI_assms]:
"handle_vm_fault thread fault \<lbrace>valid_list\<rbrace>"
unfolding handle_vm_fault_def by (cases fault; wpsimp)
lemma handle_interrupt_valid_list[wp, Deterministic_AI_assms]:
"\<lbrace>valid_list\<rbrace> handle_interrupt irq \<lbrace>\<lambda>_.valid_list\<rbrace>"
unfolding handle_interrupt_def ackInterrupt_def
apply (rule hoare_pre)
by (wp get_cap_wp do_machine_op_valid_list
| wpc | simp add: get_irq_slot_def handle_reserved_irq_def arch_mask_irq_signal_def
| wp (once) hoare_drop_imps)+
crunch valid_list[wp, Deterministic_AI_assms]: handle_send,handle_reply valid_list
crunch valid_list[wp, Deterministic_AI_assms]: handle_hypervisor_fault valid_list
end
global_interpretation Deterministic_AI_2?: Deterministic_AI_2
proof goal_cases
interpret Arch .
case 1 show ?case by (unfold_locales; (fact Deterministic_AI_assms)?)
qed
end