diff --git a/theories/logrel/session_types.v b/theories/logrel/session_types.v index c9325512a6eb2e648e12227ca07dc6ffffa06065..f3195816888de52541d83a17e7c01fd04b717eb6 100644 --- a/theories/logrel/session_types.v +++ b/theories/logrel/session_types.v @@ -107,6 +107,19 @@ Section session_types. Proof. solve_proper. Qed. Global Instance lty_choice_proper a : Proper ((≡) ==> (≡)) (@lty_choice Σ a). Proof. apply ne_proper, _. Qed. + Global Instance lty_choice_contractive a : + Proper (map_relation (dist_later n) (λ _, False) (λ _, False) ==> dist n) + (@lty_choice Σ a). + Proof. + intros n Ss Ts Heq. rewrite /lty_choice. + do 4 f_equiv. + rewrite !lookup_total_alt. + specialize (Heq a0). + destruct (Ss !! a0), (Ts !! a0); + [ f_contractive | contradiction | contradiction | done ]. + - f_equiv. split; intros H; eauto. + - by rewrite Heq. + Qed. Global Instance lty_dual_ne : NonExpansive (@lty_dual Σ). Proof. solve_proper. Qed. Global Instance lty_dual_proper : Proper ((≡) ==> (≡)) (@lty_dual Σ).