Guest User

Untitled

a guest
Nov 1st, 2018
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. ----------------------------- MODULE messaging1 -----------------------------
  2. EXTENDS Sequences, TLC
  3.  
  4. (*--algorithm telephone
  5. variables
  6. to_send = <<1, 2, 3>>,
  7. received = <<>>,
  8. in_transit = {};
  9. can_send = TRUE;
  10. begin
  11. while Len(received) /= 3 do
  12. \* send
  13. if can_send /\ to_send /= <<>> then
  14. in_transit := in_transit \union {Head(to_send)};
  15. to_send := Tail(to_send);
  16. can_send := FALSE;
  17. end if;
  18. \* receive
  19. either
  20. with msg \in in_transit do
  21. received := Append(received, msg);
  22. in_transit := in_transit \ {msg};
  23. can_send := TRUE;
  24. end with;
  25. or
  26. skip;
  27. end either;
  28. end while;
  29. assert received = <<1, 2, 3>>;
  30. end algorithm; *)
  31. \* BEGIN TRANSLATION
  32. VARIABLES to_send, received, in_transit, can_send, pc
  33.  
  34. vars == << to_send, received, in_transit, can_send, pc >>
  35.  
  36. Init == (* Global variables *)
  37. /\ to_send = <<1, 2, 3>>
  38. /\ received = <<>>
  39. /\ in_transit = {}
  40. /\ can_send = TRUE
  41. /\ pc = "Lbl_1"
  42.  
  43. Lbl_1 == /\ pc = "Lbl_1"
  44. /\ IF Len(received) /= 3
  45. THEN /\ IF can_send /\ to_send /= <<>>
  46. THEN /\ in_transit' = (in_transit \union {Head(to_send)})
  47. /\ to_send' = Tail(to_send)
  48. /\ can_send' = FALSE
  49. ELSE /\ TRUE
  50. /\ UNCHANGED << to_send, in_transit, can_send >>
  51. /\ \/ /\ pc' = "Lbl_2"
  52. \/ /\ TRUE
  53. /\ pc' = "Lbl_1"
  54. ELSE /\ Assert(received = <<1, 2, 3>>,
  55. "Failure of assertion at line 29, column 4.")
  56. /\ pc' = "Done"
  57. /\ UNCHANGED << to_send, in_transit, can_send >>
  58. /\ UNCHANGED received
  59.  
  60. Lbl_2 == /\ pc = "Lbl_2"
  61. /\ \E msg \in in_transit:
  62. /\ received' = Append(received, msg)
  63. /\ in_transit' = in_transit \ {msg}
  64. /\ can_send' = TRUE
  65. /\ pc' = "Lbl_1"
  66. /\ UNCHANGED to_send
  67.  
  68. Next == Lbl_1 \/ Lbl_2
  69. \/ (* Disjunct to prevent deadlock on termination *)
  70. (pc = "Done" /\ UNCHANGED vars)
  71.  
  72. Spec == Init /\ [][Next]_vars
  73.  
  74. Termination == <>(pc = "Done")
  75.  
  76. \* END TRANSLATION
  77.  
  78. =============================================================================
  79. \* Modification History
  80. \* Last modified Thu Oct 25 17:27:53 PDT 2018 by sriram
  81. \* Created Thu Oct 25 16:37:02 PDT 2018 by sriram
Advertisement
Add Comment
Please, Sign In to add comment