diff --git a/iris/program_logic/weakestpre.v b/iris/program_logic/weakestpre.v index e5d59481e09b1ed47661e53c436e2e6cc4c5fdda..883d401af9e682b85437a556ca9c76d7b43c3e4f 100644 --- a/iris/program_logic/weakestpre.v +++ b/iris/program_logic/weakestpre.v @@ -354,12 +354,6 @@ Proof. iIntros "HR HWP". iApply (wp_wand with "HWP"). iIntros (v) "HΦ". by iApply "HΦ". Qed. -Lemma wp_frame_wand_l s E e Q Φ : - Q ∗ WP e @ s; E {{ v, Q -∗ Φ v }} -∗ WP e @ s; E {{ Φ }}. -Proof. iIntros "[HQ HWP]". by iApply (wp_frame_wand with "HQ"). Qed. -Lemma wp_frame_wand_r s E e Q Φ : - WP e @ s; E {{ v, Q -∗ Φ v }} ∗ Q -∗ WP e @ s; E {{ Φ }}. -Proof. iIntros "[HWP HQ]". by iApply (wp_frame_wand with "HQ"). Qed. End wp. (** Proofmode class instances *) diff --git a/iris_heap_lang/proofmode.v b/iris_heap_lang/proofmode.v index ab4d717041fb158023d6ea3fae514d4a752457a1..55314fede036babd02bb1bd11703d7b12d55089a 100644 --- a/iris_heap_lang/proofmode.v +++ b/iris_heap_lang/proofmode.v @@ -1,4 +1,4 @@ -From iris.proofmode Require Import coq_tactics reduction. +From iris.proofmode Require Import coq_tactics reduction spec_patterns. From iris.proofmode Require Export tactics. From iris.program_logic Require Import atomic. From iris.heap_lang Require Export tactics derived_laws. @@ -556,9 +556,13 @@ Tactic Notation "awp_apply" open_constr(lem) := wp_apply_core lem ltac:(fun H => iApplyHyp H) ltac:(fun cont => fail); last iAuIntro. Tactic Notation "awp_apply" open_constr(lem) "without" constr(Hs) := + (* Convert "list of hypothesis" into specialization pattern. *) + let Hs := words Hs in + let Hs := eval vm_compute in (INamed <$> Hs) in wp_apply_core lem ltac:(fun H => - iApply wp_frame_wand_l; iSplitL Hs; [iAccu|iApplyHyp H]) + iApply (wp_frame_wand with + [SGoal $ SpecGoal GSpatial false [] Hs false]); [iAccu|iApplyHyp H]) ltac:(fun cont => fail); last iAuIntro.