diff --git a/proof/refine/RISCV64/Invariants_H.thy b/proof/refine/RISCV64/Invariants_H.thy index c2b257626..ce0ee9b8a 100644 --- a/proof/refine/RISCV64/Invariants_H.thy +++ b/proof/refine/RISCV64/Invariants_H.thy @@ -16,6 +16,10 @@ imports "Lib.AddUpdSimps" begin +(* FIXME RISCV: move up, use everywhere *) +abbreviation ptr_range :: "obj_ref \ nat \ machine_word set" where + "ptr_range p n \ {p .. p + mask n}" + (* global data and code of the kernel, not covered by any cap *) axiomatization kernel_data_refs :: "word64 set" @@ -46,10 +50,6 @@ end section "Invariants on Executable Spec" -(* FIXME RISCV: move up, use everywhere *) -abbreviation ptr_range :: "obj_ref \ nat \ machine_word set" where - "ptr_range p n \ {p .. p + mask n}" - context begin interpretation Arch . definition ps_clear :: "obj_ref \ nat \ kernel_state \ bool" where @@ -427,32 +427,6 @@ definition valid_ntfn' :: "Structures_H.notification \ kernel_state definition valid_mapping' :: "machine_word \ vmpage_size \ kernel_state \ bool" where "valid_mapping' x sz s \ is_aligned x (pageBitsForSize sz) \ ptrFromPAddr x \ 0" -(* FIXME RISCV: double check, might not even need alignment, might also want the full version instead *) -primrec valid_pte' :: "pte \ kernel_state \ bool" where - "valid_pte' (InvalidPTE) = \" -| "valid_pte' (PagePTE ptr _ _ _ _) = \" -| "valid_pte' (PageTablePTE ptr _ _) = (\_. is_aligned ptr ptBits)" - -(* FIXME RISCV: double check, might want to add the same in abstract *) -primrec valid_asid_pool' :: "asidpool \ kernel_state \ bool" where - "valid_asid_pool' (ASIDPool pool) = - (\s. dom pool \ {0 .. 2^asid_low_bits - 1} \ - 0 \ ran pool \ (\x \ ran pool. is_aligned x ptBits))" - -primrec - valid_arch_obj' :: "arch_kernel_object \ kernel_state \ bool" -where - "valid_arch_obj' (KOASIDPool pool) = valid_asid_pool' pool" -| "valid_arch_obj' (KOPTE pte) = valid_pte' pte" - -definition arch_obj'_fun_lift :: "(arch_kernel_object \ 'a) \ 'a \ kernel_object \ 'a" where - "arch_obj'_fun_lift P F obj \ case obj of KOArch ao \ P ao | _ \ F" - -lemmas arch_obj'_fun_lift_simps[simp] = arch_obj'_fun_lift_def[split_simps kernel_object.split] - -definition valid_aobj' :: "kernel_object \ kernel_state \ bool" where - "valid_aobj' \ arch_obj'_fun_lift valid_arch_obj' \" - definition valid_obj' :: "Structures_H.kernel_object \ kernel_state \ bool" where @@ -1602,22 +1576,13 @@ lemma valid_cap'_pspaceI: simp: vspace_table_at'_defs valid_arch_cap'_def valid_arch_cap_ref'_def split: arch_capability.split zombie_type.split option.splits) -lemma valid_arch_obj'_pspaceI: - "valid_arch_obj' obj s \ ksPSpace s = ksPSpace s' \ valid_arch_obj' obj s'" - apply (cases obj; simp) - apply (rename_tac asidpool) - apply (case_tac asidpool, - auto intro: typ_at'_pspaceI[rotated])[1] - apply (rename_tac pte) - apply (case_tac pte; simp add: valid_mapping'_def) - done lemma valid_obj'_pspaceI: "valid_obj' obj s \ ksPSpace s = ksPSpace s' \ valid_obj' obj s'" unfolding valid_obj'_def by (cases obj) (auto simp: valid_ep'_def valid_ntfn'_def valid_tcb'_def valid_cte'_def - valid_tcb_state'_def valid_arch_obj'_pspaceI valid_bound_tcb'_def + valid_tcb_state'_def valid_bound_tcb'_def valid_bound_ntfn'_def split: Structures_H.endpoint.splits Structures_H.notification.splits Structures_H.thread_state.splits ntfn.splits option.splits @@ -2243,16 +2208,6 @@ lemma typ_at_lift_valid_irq_node': apply (wp hoare_vcg_all_lift P typ_at_lift_cte') done -lemma valid_pte_lift': - assumes x: "\T p. \typ_at' T p\ f \\rv. typ_at' T p\" - shows "\\s. valid_pte' pte s\ f \\rv s. valid_pte' pte s\" - by (cases pte) (simp add: valid_mapping'_def|wp x)+ - -lemma valid_asid_pool_lift': - assumes x: "\T p. \typ_at' T p\ f \\rv. typ_at' T p\" - shows "\\s. valid_asid_pool' ap s\ f \\rv s. valid_asid_pool' ap s\" - by (cases ap) (simp|wp x typ_at_lift_page_table_at' hoare_vcg_const_Ball_lift)+ - lemma valid_bound_tcb_lift: "(\T p. \typ_at' T p\ f \\_. typ_at' T p\) \ \valid_bound_tcb' tcb\ f \\_. valid_bound_tcb' tcb\" @@ -2265,8 +2220,6 @@ lemmas typ_at_lifts = typ_at_lift_tcb' typ_at_lift_ep' typ_at_lift_asid_at' typ_at_lift_valid_untyped' typ_at_lift_valid_cap' - valid_pte_lift' - valid_asid_pool_lift' valid_bound_tcb_lift lemma mdb_next_unfold: