diff --git a/opam b/opam index dab2693c9df1c96e4a27b92707cee4a50d319bce..3819c7f88f782e1821bbdb070130c194d0e3791d 100644 --- a/opam +++ b/opam @@ -9,5 +9,5 @@ build: [make "-j%{jobs}%"] install: [make "install"] remove: [ "sh" "-c" "rm -rf '%{lib}%/coq/user-contrib/igps" ] depends: [ - "coq-iris" { (= "branch.gen_proofmode.2018-01-18.2") | (= "dev") } + "coq-iris" { (= "branch.gen_proofmode.2018-01-22.3") | (= "dev") } ] diff --git a/theories/examples/tstack.v b/theories/examples/tstack.v index a8c01fb678ca19d9ba294801ae050b01bd26c604..5271171f6c7f2c07793e132d478a0789eee6f2b4 100644 --- a/theories/examples/tstack.v +++ b/theories/examples/tstack.v @@ -100,7 +100,7 @@ Section TreiberStack. iIntros "Head". iDestruct "Head" as (A) "Head". rewrite /ReachableD (fixpoint_unfold (ReachableD') _ _). - revert n. induction A as [|n' A'] => n. + iInduction A as [|n' A'] "IH" forall (n). - iDestruct "Head" as % ->. iSplitL; iExists []; by rewrite /ReachableD (fixpoint_unfold (ReachableD') _ _). - iDestruct "Head" as "(% & Head)". @@ -108,9 +108,7 @@ Section TreiberStack. iAssert (▷ ((Head P false l s n') ∗ (Head P false l s n')))%I with "[Head]" as "(Hn1 & Hn2)". { iNext. rewrite (fixpoint_unfold (ReachableD') _ _). - (* iApply (IHA' n' with "[Head]"). *) - admit. - } + iApply ("IH" with "Head"). } iDestruct (na_frac_split_2 with "next") as "[NA1 NA2]". iSplitL "Hn1 NA1"; [iDestruct "Hn1" as (A1) "Hn1"; iExists (n' :: A1) @@ -119,7 +117,7 @@ Section TreiberStack. (iSplitL ""; first done); iExists (q/2)%Qp; [iFrame "NA1"| iFrame "NA2"]; iNext; by rewrite (fixpoint_unfold (ReachableD') _ _). - Admitted. + Qed. Lemma Head_dup_main P l s n: Head P true l s n -∗ Head P true l s n ∗ Head P false l s n. @@ -127,7 +125,7 @@ Section TreiberStack. iIntros "Head". iDestruct "Head" as (A) "Head". rewrite /Reachable (fixpoint_unfold (Reachable' P) _ _). - revert n. induction A as [|n' A'] => n. + iInduction A as [|n' A'] "IH" forall (n). - iDestruct "Head" as "#Head". iSplitL; iExists []. + by rewrite /Reachable' /Reachable (fixpoint_unfold (Reachable' P) _ _). @@ -137,9 +135,7 @@ Section TreiberStack. iAssert (▷ ((Head P true l s h') ∗ (Head P false l s h')))%I with "[Head]" as "(Hn1 & Hn2)". { iNext. rewrite (fixpoint_unfold (Reachable' P) _ _). - (* by iApply (IHA' h' with "[Head]"). *) - admit. - } + iApply ("IH" with "Head"). } iDestruct (na_frac_split_2 with "next") as "[NA1 NA2]". iSplitL "Hn1 NA1 od P". + iDestruct "Hn1" as (A1) "Hn1"; iExists (n' :: A1). @@ -152,7 +148,7 @@ Section TreiberStack. iSplitL ""; first done. iExists _. iFrame "NA2". iNext; by rewrite (fixpoint_unfold (ReachableD') _ _). - Admitted. + Qed. End Interpretation. Section proof. diff --git a/theories/weakestpre.v b/theories/weakestpre.v index ee1cab8148059e252ad3bb10fa470e20b7f38e9a..fdb7002378bd5f44976473b0db5f504c8f203b4a 100644 --- a/theories/weakestpre.v +++ b/theories/weakestpre.v @@ -187,8 +187,7 @@ Proof. intros Hatomic. iStartProof (uPred _). iIntros (?) "H". rewrite wp_eq /wp_def /=. iIntros (?? π) "S". iApply (weakestpre.wp_atomic _ E1 E2) => //. iMod "H". iModIntro. - iApply (weakestpre.wp_strong_mono _ E2); first done. - iDestruct ("H" with "[%] S") as "$"; first done. + iApply (weakestpre.wp_strong_mono _ _ E2 with "[-]"); [done..|by iApply "H"|]. iIntros (?) "H". case_match. iModIntro. by iDestruct "H" as "[$ H]". Qed. @@ -242,7 +241,7 @@ Proof. iIntros "H" (V_1 ??) "S". iApply (wp_bind_iris). iSpecialize ("H" with "[%] S"); first done. - iApply (weakestpre.wp_strong_mono with "[$H]"); first done. + iApply (weakestpre.wp_strong_mono with "[$H]"); [done..|]. iIntros ([v V_2]) "[S H]". by iApply ("H"). Qed.