diff --git a/theories/program_logic/adequacy.v b/theories/program_logic/adequacy.v index ada5bbd34cea8eec72687747d0d61c79e7256e5c..fb5a6b41e4f6fb32ed12e94a6ce592d342ac8dc7 100644 --- a/theories/program_logic/adequacy.v +++ b/theories/program_logic/adequacy.v @@ -128,7 +128,7 @@ Lemma wptp_result s n e1 t1 v2 t2 σ1 σ2 φ : Proof. intros. rewrite wptp_steps // laterN_later. apply: bupd_iter_laterN_mono. iDestruct 1 as (e2 t2' ?) "((Hw & HE & _) & H & _)"; simplify_eq. - iDestruct (wp_value_inv with "H") as "H". rewrite fupd_eq /fupd_def. + iDestruct (wp_value_inv' with "H") as "H". rewrite fupd_eq /fupd_def. iMod ("H" with "[Hw HE]") as ">(_ & _ & $)"; iFrame; auto. Qed. diff --git a/theories/program_logic/total_weakestpre.v b/theories/program_logic/total_weakestpre.v index 9548bba4b6c0d98447dbdf2a99611eb07cd36b8c..1218551ca96dff2d810910af5ec0964dc9ba8e15 100644 --- a/theories/program_logic/total_weakestpre.v +++ b/theories/program_logic/total_weakestpre.v @@ -222,7 +222,7 @@ Qed. Lemma twp_value' s E Φ v : Φ v -∗ WP of_val v @ s; E [{ Φ }]. Proof. iIntros "HΦ". rewrite twp_unfold /twp_pre to_of_val. auto. Qed. -Lemma twp_value_inv s E Φ v : WP of_val v @ s; E [{ Φ }] ={E}=∗ Φ v. +Lemma twp_value_inv' s E Φ v : WP of_val v @ s; E [{ Φ }] ={E}=∗ Φ v. Proof. by rewrite twp_unfold /twp_pre to_of_val. Qed. Lemma twp_strong_mono s1 s2 E1 E2 e Φ Ψ : @@ -267,7 +267,7 @@ Proof. + iMod ("H" with "[$]") as "[H _]". iDestruct "H" as %(? & ? & ? & ?). by edestruct (atomic _ _ _ _ Hstep). - destruct (atomic _ _ _ _ Hstep) as [v <-%of_to_val]. - iMod (twp_value_inv with "H") as ">H". iFrame "Hphy". by iApply twp_value'. + iMod (twp_value_inv' with "H") as ">H". iFrame "Hphy". by iApply twp_value'. Qed. Lemma twp_bind K `{!LanguageCtx K} s E e Φ : @@ -348,6 +348,8 @@ Lemma twp_value_fupd' s E Φ v : (|={E}=> Φ v) -∗ WP of_val v @ s; E [{ Φ }] Proof. intros. by rewrite -twp_fupd -twp_value'. Qed. Lemma twp_value_fupd s E Φ e v `{!IntoVal e v} : (|={E}=> Φ v) -∗ WP e @ s; E [{ Φ }]. Proof. intros. rewrite -twp_fupd -twp_value //. Qed. +Lemma twp_value_inv s E Φ e v `{!IntoVal e v} : WP e @ s; E [{ Φ }] ={E}=∗ Φ v. +Proof. intros; rewrite -(of_to_val e v) //; by apply twp_value_inv'. Qed. Lemma twp_frame_l s E e Φ R : R ∗ WP e @ s; E [{ Φ }] -∗ WP e @ s; E [{ v, R ∗ Φ v }]. Proof. iIntros "[? H]". iApply (twp_strong_mono with "H"); auto with iFrame. Qed. diff --git a/theories/program_logic/weakestpre.v b/theories/program_logic/weakestpre.v index 15473de95e7ff3462ae739e17ca8a38909bf789e..a48f9807026d054958cda375cac8a98fa1fe4109 100644 --- a/theories/program_logic/weakestpre.v +++ b/theories/program_logic/weakestpre.v @@ -208,7 +208,7 @@ Qed. Lemma wp_value' s E Φ v : Φ v ⊢ WP of_val v @ s; E {{ Φ }}. Proof. iIntros "HΦ". rewrite wp_unfold /wp_pre to_of_val. auto. Qed. -Lemma wp_value_inv s E Φ v : WP of_val v @ s; E {{ Φ }} ={E}=∗ Φ v. +Lemma wp_value_inv' s E Φ v : WP of_val v @ s; E {{ Φ }} ={E}=∗ Φ v. Proof. by rewrite wp_unfold /wp_pre to_of_val. Qed. Lemma wp_strong_mono s1 s2 E1 E2 e Φ Ψ : @@ -252,7 +252,7 @@ Proof. + iMod ("H" with "[$]") as "[H _]". iDestruct "H" as %(? & ? & ? & ?). by edestruct (atomic _ _ _ _ Hstep). - destruct (atomic _ _ _ _ Hstep) as [v <-%of_to_val]. - iMod (wp_value_inv with "H") as ">H". iFrame "Hphy". by iApply wp_value'. + iMod (wp_value_inv' with "H") as ">H". iFrame "Hphy". by iApply wp_value'. Qed. Lemma wp_step_fupd s E1 E2 e P Φ : @@ -322,6 +322,8 @@ Proof. intros. by rewrite -wp_fupd -wp_value'. Qed. Lemma wp_value_fupd s E Φ e v `{!IntoVal e v} : (|={E}=> Φ v) ⊢ WP e @ s; E {{ Φ }}. Proof. intros. rewrite -wp_fupd -wp_value //. Qed. +Lemma wp_value_inv s E Φ e v `{!IntoVal e v} : WP e @ s; E {{ Φ }} ={E}=∗ Φ v. +Proof. intros; rewrite -(of_to_val e v) //; by apply wp_value_inv'. Qed. Lemma wp_frame_l s E e Φ R : R ∗ WP e @ s; E {{ Φ }} ⊢ WP e @ s; E {{ v, R ∗ Φ v }}. Proof. iIntros "[? H]". iApply (wp_strong_mono with "H"); auto with iFrame. Qed.