Skip to content
Snippets Groups Projects
Commit c1bfaa60 authored by Jonas Kastberg's avatar Jonas Kastberg
Browse files

Updated choice type to be n-ary

parent acd848fe
No related branches found
No related tags found
No related merge requests found
From actris.logrel Require Export ltyping lsty. From actris.logrel Require Export ltyping lsty.
From iris.algebra Require Import gmap.
From iris.heap_lang Require Export lifting metatheory. From iris.heap_lang Require Export lifting metatheory.
From iris.base_logic.lib Require Import invariants. From iris.base_logic.lib Require Import invariants.
From iris.heap_lang Require Import notation proofmode. From iris.heap_lang Require Import notation proofmode.
...@@ -9,15 +10,21 @@ Section protocols. ...@@ -9,15 +10,21 @@ Section protocols.
Definition lsty_end : lsty Σ := Lsty END. Definition lsty_end : lsty Σ := Lsty END.
Definition lsty_message (a : action ) (A : lty Σ) (P : lsty Σ) : lsty Σ :=
Lsty (<a> v, MSG v {{ A v }}; lsty_car P).
Definition lsty_send (A : lty Σ) (P : lsty Σ) : lsty Σ := Definition lsty_send (A : lty Σ) (P : lsty Σ) : lsty Σ :=
Lsty (<!> v, MSG v {{ A v }}; lsty_car P). lsty_message Send A P.
Definition lsty_recv (A : lty Σ) (P : lsty Σ) : lsty Σ := Definition lsty_recv (A : lty Σ) (P : lsty Σ) : lsty Σ :=
Lsty (<?> v, MSG v {{ A v }}; lsty_car P). lsty_message Recv A P.
Definition lsty_choice (a : action) (Ps : gmap Z (lsty Σ)) : lsty Σ :=
Lsty (<a> x : Z, MSG #x {{ is_Some (Ps !! x) }}; lsty_car (Ps !!! x)).
Definition lsty_branch (P1 P2 : lsty Σ) : lsty Σ := Definition lsty_select (Ps : gmap Z (lsty Σ)) : lsty Σ :=
Lsty (P1 <&> P2). lsty_choice Send Ps.
Definition lsty_select (P1 P2 : lsty Σ) : lsty Σ := Definition lsty_branch (Ps : gmap Z (lsty Σ)) : lsty Σ :=
Lsty (P1 <+> P2). lsty_choice Recv Ps.
Definition lsty_rec1 (C : lsty Σ lsty Σ) Definition lsty_rec1 (C : lsty Σ lsty Σ)
`{!Contractive C} `{!Contractive C}
...@@ -41,7 +48,7 @@ End protocols. ...@@ -41,7 +48,7 @@ End protocols.
Section Propers. Section Propers.
Context `{heapG Σ, protoG Σ}. Context `{heapG Σ, protoG Σ}.
Global Instance lsty_send_ne : NonExpansive2 (@lsty_send Σ). Global Instance lsty_message_ne a : NonExpansive2 (@lsty_message Σ a).
Proof. Proof.
intros n A A' H1 P P' H2. intros n A A' H1 P P' H2.
rewrite /lsty_send. rewrite /lsty_send.
...@@ -49,8 +56,8 @@ Section Propers. ...@@ -49,8 +56,8 @@ Section Propers.
apply iProto_message_ne; simpl; try done. apply iProto_message_ne; simpl; try done.
Qed. Qed.
Global Instance lsty_send_contractive n : Global Instance lsty_message_contractive n a :
Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_send Σ). Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_message Σ a).
Proof. Proof.
intros A A' H1 P P' H2. intros A A' H1 P P' H2.
rewrite /lsty_send. rewrite /lsty_send.
...@@ -61,65 +68,50 @@ Section Propers. ...@@ -61,65 +68,50 @@ Section Propers.
apply H1. apply H1.
Qed. Qed.
Global Instance lsty_send_ne : NonExpansive2 (@lsty_send Σ).
Proof. solve_proper. Qed.
Global Instance lsty_send_contractive n :
Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_send Σ).
Proof. solve_contractive. Qed.
Global Instance lsty_recv_ne : NonExpansive2 (@lsty_recv Σ). Global Instance lsty_recv_ne : NonExpansive2 (@lsty_recv Σ).
Proof. Proof. solve_proper. Qed.
intros n A A' H1 P P' H2.
rewrite /lsty_recv.
apply Lsty_ne.
apply iProto_message_ne; simpl; try done.
Qed.
Global Instance lsty_recv_contractive n : Global Instance lsty_recv_contractive n :
Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_recv Σ). Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_recv Σ).
Proof. Proof. solve_contractive. Qed.
intros A A' H1 P P' H2.
rewrite /lsty_recv.
apply Lsty_ne.
apply iProto_message_contractive; simpl; try done.
intros v.
destruct n as [|n]; try done.
apply H1.
Qed.
Global Instance lsty_branch_ne : NonExpansive2 (@lsty_branch Σ). Global Instance lsty_choice_ne a : NonExpansive (@lsty_choice Σ a).
Proof. Proof.
intros n A A' H1 P P' H2. intros n Ps1 Ps2 Pseq.
rewrite /lsty_branch.
apply Lsty_ne. apply Lsty_ne.
apply iProto_message_ne; simpl; try done. apply iProto_message_ne; simpl; try done;
intros v. destruct v; done. solve_proper.
Qed. Qed.
Global Instance lsty_branch_contractive n : Global Instance lsty_choice_contractive n a :
Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_branch Σ). Proper (dist_later n ==> dist n) (@lsty_choice Σ a).
Proof. Proof.
intros A A' H1 P P' H2. intros Ps1 Ps2 Pseq.
rewrite /lsty_branch.
apply Lsty_ne. apply Lsty_ne.
apply iProto_message_contractive; simpl; try done. apply iProto_message_contractive; simpl; try done;
intros v. destruct n=> //=; solve_proper.
destruct v; destruct n as [|n]; try done.
Qed. Qed.
Global Instance lsty_select_ne : NonExpansive2 (@lsty_select Σ). Global Instance lsty_select_ne : NonExpansive (@lsty_select Σ).
Proof. Proof. solve_proper. Qed.
intros n A A' H1 P P' H2.
rewrite /lsty_select.
apply Lsty_ne.
apply iProto_message_ne; simpl; try done.
intros v. destruct v; done.
Qed.
Global Instance lsty_select_contractive n : Global Instance lsty_select_contractive n :
Proper (dist_later n ==> dist_later n ==> dist n) (@lsty_select Σ). Proper (dist_later n ==> dist n) (@lsty_select Σ).
Proof. Proof. solve_contractive. Qed.
intros A A' H1 P P' H2.
rewrite /lsty_select. Global Instance lsty_branch_ne : NonExpansive (@lsty_branch Σ).
apply Lsty_ne. Proof. solve_proper. Qed.
apply iProto_message_contractive; simpl; try done.
intros v. Global Instance lsty_branch_contractive n :
destruct v; destruct n as [|n]; try done. Proper (dist_later n ==> dist n) (@lsty_branch Σ).
Qed. Proof. solve_contractive. Qed.
Global Instance lsty_dual_ne : NonExpansive (@lsty_dual Σ). Global Instance lsty_dual_ne : NonExpansive (@lsty_dual Σ).
Proof. Proof.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment