diff --git a/theories/channel/proto.v b/theories/channel/proto.v index 7eef5ceb2f7e3fe42edd6df819a4b35c0866b717..4ebce7b9494ff5f827f64e324d5cf49f840981ae 100644 --- a/theories/channel/proto.v +++ b/theories/channel/proto.v @@ -899,6 +899,17 @@ Section proto. iSplitL "H"; [iIntros "!>"; by iRewrite "Hp2d"|]. simpl; auto. Qed. + Lemma iProto_le_amber (p1 p2 : iProto Σ V → iProto Σ V) + `{Contractive p1, Contractive p2}: + □ (∀ rec1 rec2, ▷ (rec1 ⊑ rec2) → p1 rec1 ⊑ p2 rec2) -∗ + fixpoint p1 ⊑ fixpoint p2. + Proof. + iIntros "#H". iLöb as "IH". + iEval (rewrite (fixpoint_unfold p1)). + iEval (rewrite (fixpoint_unfold p2)). + iApply "H". iApply "IH". + Qed. + Lemma iProto_le_dual_l p1 p2 : iProto_dual p2 ⊑ p1 -∗ iProto_dual p1 ⊑ p2. Proof. iIntros "H". iEval (rewrite -(involutive iProto_dual p2)).