diff --git a/heap_lang/lifting.v b/heap_lang/lifting.v index 7d45d55010816376fda543e59271b8d1ac3c1a8c..debbf0ed3f26e503726ec7326bdabe01d24c8071 100644 --- a/heap_lang/lifting.v +++ b/heap_lang/lifting.v @@ -52,7 +52,7 @@ Lemma wp_alloc_pst E σ v : Proof. iIntros (Φ) "HP HΦ". iApply (wp_lift_atomic_head_step (Alloc (of_val v)) σ); eauto. - iFrame "HP". iNext. iIntros (v2 σ2 ef) "[% HP]". inv_head_step. + iFrame "HP". iNext. iIntros (v2 σ2 ef) "% HP". inv_head_step. iSplitL; last by iApply big_sepL_nil. iApply "HΦ". by iSplit. Qed. diff --git a/program_logic/ectx_lifting.v b/program_logic/ectx_lifting.v index a95cb59df36038214f91d4659086b220e09ad721..7341fd48e0813f26ed13f4a042b5dff293ebad58 100644 --- a/program_logic/ectx_lifting.v +++ b/program_logic/ectx_lifting.v @@ -17,14 +17,14 @@ Proof. apply: weakestpre.wp_bind. Qed. Lemma wp_lift_head_step E Φ e1 : (|={E,∅}=> ∃ σ1, ⌜head_reducible e1 σ1⌠∗ ▷ ownP σ1 ∗ - ▷ ∀ e2 σ2 efs, ⌜head_step e1 σ1 e2 σ2 efs⌠∗ ownP σ2 + ▷ ∀ e2 σ2 efs, ⌜head_step e1 σ1 e2 σ2 efs⌠-∗ ownP σ2 ={∅,E}=∗ WP e2 @ E {{ Φ }} ∗ [∗ list] ef ∈ efs, WP ef {{ _, True }}) ⊢ WP e1 @ E {{ Φ }}. Proof. iIntros "H". iApply (wp_lift_step E); try done. iMod "H" as (σ1) "(%&Hσ1&Hwp)". iModIntro. iExists σ1. - iSplit; first by eauto. iFrame. iNext. iIntros (e2 σ2 efs) "[% ?]". - iApply "Hwp". by eauto. + iSplit; first by eauto. iFrame. iNext. iIntros (e2 σ2 efs) "% ?". + iApply ("Hwp" with "* []"); by eauto. Qed. Lemma wp_lift_pure_head_step E Φ e1 : @@ -41,12 +41,12 @@ Qed. Lemma wp_lift_atomic_head_step {E Φ} e1 σ1 : head_reducible e1 σ1 → ▷ ownP σ1 ∗ ▷ (∀ e2 σ2 efs, - ⌜head_step e1 σ1 e2 σ2 efs⌠∧ ownP σ2 -∗ + ⌜head_step e1 σ1 e2 σ2 efs⌠-∗ ownP σ2 -∗ default False (to_val e2) Φ ∗ [∗ list] ef ∈ efs, WP ef {{ _, True }}) ⊢ WP e1 @ E {{ Φ }}. Proof. iIntros (?) "[? H]". iApply wp_lift_atomic_step; eauto. iFrame. iNext. - iIntros (???) "[% ?]". iApply "H". eauto. + iIntros (???) "% ?". iApply ("H" with "* []"); eauto. Qed. Lemma wp_lift_atomic_det_head_step {E Φ e1} σ1 v2 σ2 efs : diff --git a/program_logic/lifting.v b/program_logic/lifting.v index 54c06099280d60c20b7526da457e1afbc40a4e0a..ea95a1c7a675fd6b6c0e7701ad457b749bcbe6f1 100644 --- a/program_logic/lifting.v +++ b/program_logic/lifting.v @@ -12,7 +12,7 @@ Implicit Types Φ : val Λ → iProp Σ. Lemma wp_lift_step E Φ e1 : (|={E,∅}=> ∃ σ1, ⌜reducible e1 σ1⌠∗ ▷ ownP σ1 ∗ - ▷ ∀ e2 σ2 efs, ⌜prim_step e1 σ1 e2 σ2 efs⌠∗ ownP σ2 + ▷ ∀ e2 σ2 efs, ⌜prim_step e1 σ1 e2 σ2 efs⌠-∗ ownP σ2 ={∅,E}=∗ WP e2 @ E {{ Φ }} ∗ [∗ list] ef ∈ efs, WP ef {{ _, True }}) ⊢ WP e1 @ E {{ Φ }}. Proof. @@ -25,7 +25,7 @@ Proof. iDestruct (ownP_agree σ1 σ1' with "[-]") as %<-; first by iFrame. iModIntro; iSplit; [done|]; iNext; iIntros (e2 σ2 efs Hstep). iMod (ownP_update σ1 σ2 with "[-H]") as "[$ ?]"; first by iFrame. - iApply "H"; eauto. + iApply ("H" with "* []"); eauto. Qed. Lemma wp_lift_pure_step `{Inhabited (state Λ)} E Φ e1 : @@ -46,15 +46,15 @@ Qed. (** Derived lifting lemmas. *) Lemma wp_lift_atomic_step {E Φ} e1 σ1 : reducible e1 σ1 → - (▷ ownP σ1 ∗ ▷ ∀ e2 σ2 efs, ⌜prim_step e1 σ1 e2 σ2 efs⌠∗ ownP σ2 -∗ + (▷ ownP σ1 ∗ ▷ ∀ e2 σ2 efs, ⌜prim_step e1 σ1 e2 σ2 efs⌠-∗ ownP σ2 -∗ default False (to_val e2) Φ ∗ [∗ list] ef ∈ efs, WP ef {{ _, True }}) ⊢ WP e1 @ E {{ Φ }}. Proof. iIntros (?) "[Hσ H]". iApply (wp_lift_step E _ e1). iMod (fupd_intro_mask' E ∅) as "Hclose"; first set_solver. iModIntro. iExists σ1. iFrame "Hσ"; iSplit; eauto. - iNext; iIntros (e2 σ2 efs) "[% Hσ]". - iDestruct ("H" $! e2 σ2 efs with "[Hσ]") as "[HΦ $]"; first by eauto. + iNext; iIntros (e2 σ2 efs) "% Hσ". + iDestruct ("H" $! e2 σ2 efs with "[] [Hσ]") as "[HΦ $]"; [by eauto..|]. destruct (to_val e2) eqn:?; last by iExFalso. iMod "Hclose". iApply wp_value; auto using to_of_val. done. Qed. @@ -68,7 +68,7 @@ Lemma wp_lift_atomic_det_step {E Φ e1} σ1 v2 σ2 efs : ⊢ WP e1 @ E {{ Φ }}. Proof. iIntros (? Hdet) "[Hσ1 Hσ2]". iApply (wp_lift_atomic_step _ σ1); try done. - iFrame. iNext. iIntros (e2' σ2' efs') "[% Hσ2']". + iFrame. iNext. iIntros (e2' σ2' efs') "% Hσ2'". edestruct Hdet as (->&Hval&->). done. rewrite Hval. by iApply "Hσ2". Qed.