cpsa-4.4.1: coq/Examples/Nsl.v
(** Protocol: nsl (nsl.scm:3:1) *)
Require Import Proc.
Import List.ListNotations.
Open Scope list_scope.
Open Scope string.
(** Role: init (nsl.scm:4:3) *)
Definition init: proc :=
mkProc
[(0, Chan); (1, Ikey); (2, Akey); (3, Akey)]
[
(* Send (nsl.scm:7:6) *)
Bind (4, Text) (Frsh_);
Bind (5, Mesg) (Pair_ 4 2);
Bind (6, Mesg) (Encr_ 5 3);
Send 0 6;
(* Recv (nsl.scm:8:6) *)
Bind (7, Mesg) (Recv_ 0);
Bind (8, Mesg) (Decr_ 7 1);
Bind (9, Text) (Frst_ 8);
Bind (10, Mesg) (Scnd_ 8);
Same 9 4;
Bind (11, Text) (Frst_ 10);
Bind (12, Akey) (Scnd_ 10);
Same 12 3;
(* Send (nsl.scm:9:6) *)
Bind (13, Mesg) (Encr_ 11 3);
Send 0 13;
Return [4; 11]
].
(** Role: resp (nsl.scm:13:3) *)
Definition resp: proc :=
mkProc
[(0, Chan); (1, Ikey); (2, Akey); (3, Akey)]
[
(* Recv (nsl.scm:16:6) *)
Bind (4, Mesg) (Recv_ 0);
Bind (5, Mesg) (Decr_ 4 1);
Bind (6, Text) (Frst_ 5);
Bind (7, Akey) (Scnd_ 5);
Same 7 3;
(* Send (nsl.scm:17:6) *)
Bind (8, Text) (Frsh_);
Bind (9, Mesg) (Pair_ 8 2);
Bind (10, Mesg) (Pair_ 6 9);
Bind (11, Mesg) (Encr_ 10 3);
Send 0 11;
(* Recv (nsl.scm:18:6) *)
Bind (12, Mesg) (Recv_ 0);
Bind (13, Text) (Decr_ 12 1);
Same 13 8;
Return [8; 6]
].