From mathcomp.ssreflect
From mathcomp
From fcsl
From DiSeL
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
(* Rely-transitions of the network in the presence of the given world *)
Section Rely.
Variable w : world.
Variable this: nid.
Notation getl := (getLocal).
Notation gets := getStatelet.
Notation getp := (@getProtocol _ w).
(* The following is the "rely" relation *)
Fixpoint network_rely' n s1 s2 :=
if n is n'.+1
then exists z s3,
[/\ this != z, network_step w z s1 s3 & network_rely' n' s3 s2]
else s1 = s2 /\ s1 \In Coh w.
Definition network_rely s1 s2 := exists n, network_rely' n s1 s2.

(* A backwards lemma: no one can send messages on my behalf, i.e., no new messages appear *)
Lemma rely_send_other l s s' m tm to b:
network_rely s s' ->
find m (dsoup (gets s' l)) = Some (Msg tm this to b) ->
exists b', find m (dsoup (gets s l)) = Some (Msg tm this to b') /\ (b -> b').