From 9200cc770730d4e8b0bd4684593fa3c6e2fe24b0 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Fri, 7 Jun 2019 16:28:11 +0200 Subject: [PATCH] Tweak the proof of `wp_adequacy`. --- theories/program_logic/adequacy.v | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/theories/program_logic/adequacy.v b/theories/program_logic/adequacy.v index 093d14d77..76ae35bf4 100644 --- a/theories/program_logic/adequacy.v +++ b/theories/program_logic/adequacy.v @@ -166,6 +166,13 @@ Record adequate {Λ} (s : stuckness) (e1 : expr Λ) (σ1 : state Λ) e2 ∈ t2 → (is_Some (to_val e2) ∨ reducible e2 σ2) }. +Lemma adequate_alt {Λ} s e1 σ1 (φ : val Λ → state Λ → Prop) : + adequate s e1 σ1 φ ↔ ∀ t2 σ2, + rtc erased_step ([e1], σ1) (t2, σ2) → + (∀ v2 t2', t2 = of_val v2 :: t2' → φ v2 σ2) ∧ + (∀ e2, s = NotStuck → e2 ∈ t2 → (is_Some (to_val e2) ∨ reducible e2 σ2)). +Proof. split. intros []; naive_solver. constructor; naive_solver. Qed. + Theorem adequate_tp_safe {Λ} (e1 : expr Λ) t2 σ1 σ2 φ : adequate NotStuck e1 σ1 φ → rtc erased_step ([e1], σ1) (t2, σ2) → @@ -190,19 +197,13 @@ Corollary wp_adequacy Σ Λ `{!invPreG Σ} s e σ φ : stateI σ κs ∗ WP e @ s; ⊤ {{ v, ⌜φ v⌠}})%I) → adequate s e σ (λ v _, φ v). Proof. - intros Hwp. split. - - intros t2 σ2 v2 [n [κs ?]]%erased_steps_nsteps. - eapply (wp_strong_adequacy Σ _); [|done]=> ?. - iMod Hwp as (stateI fork_post) "[Hσ Hwp]". - iExists (λ σ κs _, stateI σ κs), (λ v, ⌜φ vâŒ%I), fork_post. - iIntros "{$Hσ $Hwp} !>" (e2 t2' [= <- <-] _) "_ H _". rewrite to_of_val /=. - by iApply fupd_mask_weaken. - - intros t2 σ2 e2 -> [n [κs ?]]%erased_steps_nsteps. - eapply (wp_strong_adequacy Σ _); [|done]=> ?. - iMod Hwp as (stateI fork_post) "[Hσ Hwp]". - iExists (λ σ κs _, stateI σ κs), (λ v, ⌜φ vâŒ%I), fork_post. - iIntros "{$Hσ $Hwp} !>" (e2' t2' -> Hsafe) "_ _ _". - iApply fupd_mask_weaken; eauto. + intros Hwp. apply adequate_alt; intros t2 σ2 [n [κs ?]]%erased_steps_nsteps. + eapply (wp_strong_adequacy Σ _); [|done]=> ?. + iMod Hwp as (stateI fork_post) "[Hσ Hwp]". + iExists (λ σ κs _, stateI σ κs), (λ v, ⌜φ vâŒ%I), fork_post. + iIntros "{$Hσ $Hwp} !>" (e2 t2' -> ?) "_ H _". + iApply fupd_mask_weaken; [done|]. iSplit; [|done]. + iIntros (v2 t2'' [= -> <-]). by rewrite to_of_val. Qed. Corollary wp_invariance Σ Λ `{!invPreG Σ} s e σ1 t2 σ2 φ : -- GitLab