From 66c993e21ae588d9789680f626709bc581102242 Mon Sep 17 00:00:00 2001 From: Jonas Kastberg Hinrichsen <jihgfee@gmail.com> Date: Sat, 27 Jan 2024 17:48:57 +0100 Subject: [PATCH] Added two_buyer protocol --- .../multi_proto_consistency_examples.v | 76 +++++++++++++++++-- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/theories/channel/multi_proto_consistency_examples.v b/theories/channel/multi_proto_consistency_examples.v index af4b7af..c5dcdfd 100644 --- a/theories/channel/multi_proto_consistency_examples.v +++ b/theories/channel/multi_proto_consistency_examples.v @@ -302,29 +302,89 @@ Section example5. clean_map 4. clean_map 0. iProto_consistent_take_step. - iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 1. clean_map 3. + clean_map 1. clean_map 3. iProto_consistent_take_step. iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 0. clean_map 2. + clean_map 0. clean_map 2. iProto_consistent_take_step. + iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 2. clean_map 4. + clean_map 2. clean_map 4. iProto_consistent_take_step. iIntros "_". iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 3. clean_map 0. + clean_map 3. clean_map 0. iProto_consistent_take_step. iIntros "_". iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 4. clean_map 0. + clean_map 4. clean_map 0. iProto_consistent_take_step. + iIntros "_". iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 3. clean_map 0. + clean_map 3. clean_map 0. iProto_consistent_take_step. iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 2. clean_map 4. + clean_map 2. clean_map 4. iProto_consistent_take_step. iIntros "_". iSplit; [done|]. iSplit; [done|]. iNext. - clean_map 4. clean_map 0. + clean_map 4. clean_map 0. iProto_consistent_take_step. Qed. End example5. + +Section two_buyer. + Context `{!heapGS Σ}. + + Definition two_buyer_prot : gmap nat (iProto Σ) := + <[0 := (<(Send, 1) @ (title:Z)> MSG #title ; + <(Recv, 1) @ (quote:Z)> MSG #quote ; + <(Send, 2) @ (contrib:Z)> MSG #contrib ; END)%proto]> + (<[1 := (<(Recv, 0) @ (title:Z)> MSG #title ; + <(Send, 0) @ (quote:Z)> MSG #quote ; + <(Send, 2)> MSG #quote ; + <(Recv, 2) @ (b:bool)> MSG #b ; + if b then + <(Recv, 2) @ (address:Z)> MSG #address ; + <(Send, 2) @ (date:Z)> MSG #date ; END + else END)%proto]> + (<[2 := (<(Recv, 1) @ (quote:Z)> MSG #quote ; + <(Recv, 0) @ (contrib:Z)> MSG #contrib ; + if bool_decide (contrib >= quote/2)%Z then + <(Send, 1)> MSG #true ; + <(Send, 1) @ (address:Z)> MSG #address ; + <(Recv, 1) @ (date:Z)> MSG #date ; END + else + <(Send, 1)> MSG #false ; END)%proto]> + ∅)). + + Lemma two_buyer_prot_consistent : + ⊢ iProto_consistent two_buyer_prot. + Proof. + rewrite /two_buyer_prot. + iProto_consistent_take_step. + iIntros (title) "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 0. clean_map 1. + iProto_consistent_take_step. + iIntros (quote) "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 0. clean_map 1. + iProto_consistent_take_step. + iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 1. clean_map 2. + iProto_consistent_take_step. + iIntros (contrib) "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 0. clean_map 2. + case_bool_decide. + - iProto_consistent_take_step. + iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 2. clean_map 1. + iProto_consistent_take_step. + iIntros (address) "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 2. clean_map 1. + iProto_consistent_take_step. + iIntros (date) "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 2. clean_map 1. + iProto_consistent_take_step. + - iProto_consistent_take_step. + iIntros "_". iExists _. iSplit; [done|]. iSplit; [done|]. iNext. + clean_map 2. clean_map 1. + iProto_consistent_take_step. + Qed. + +End two_buyer. -- GitLab