diff --git a/theories/channel.v b/theories/channel.v index 130f48efcd4841f569e7fcc84a8581eb0ebefade..4c33c287c6a6bed4870c6767f9324149f0c75a37 100644 --- a/theories/channel.v +++ b/theories/channel.v @@ -284,23 +284,11 @@ Section channel. by iApply "HΦ". Qed. - Definition recv_vs_rec E γ c s Φ vs := - (|={⊤,E}=> ∃ ls rs, - is_chan γ c ls rs ∗ - ((try_recv_upd_fail γ c ls rs s ={E,⊤}=∗ ▷ vs) ∗ - (∀ v, try_recv_upd_succ γ c ls rs s v ={E,⊤}=∗ Φ v)))%I. - - Global Instance recv_vs_rec_contractive E γ c s Φ : - Contractive (recv_vs_rec E γ c s Φ). - Proof. - intros n P Q Heq. - rewrite /recv_vs_rec. - do 9 f_equiv. - by apply later_contractive. - Qed. - Definition recv_vs E γ c s Φ := - fixpoint (recv_vs_rec E γ c s Φ). + (□ (|={⊤,E}=> ∃ ls rs, + is_chan γ c ls rs ∗ + ((try_recv_upd_fail γ c ls rs s ={E,⊤}=∗ True) ∗ + (∀ v, try_recv_upd_succ γ c ls rs s v ={E,⊤}=∗ Φ v))))%I. Lemma recv_spec Φ E γ c s : is_side s → @@ -308,10 +296,9 @@ Section channel. recv_vs E γ c s Φ -∗ WP recv c s {{ Φ }}. Proof. - iIntros (Hside) "#Hc HΦ". + iIntros (Hside) "#Hc #HΦ". rewrite /recv. iLöb as "IH". - iDestruct (fixpoint_unfold with "HΦ") as "HΦ". wp_apply (try_recv_spec with "Hc")=> //. iMod "HΦ" as (ls rs) "[Hchan [HΦfail HΦsucc]]". iModIntro.