Section ParticipantGenericSendTransitions.
Notation coh := TPCCoh.
Definition HPn this to := (this \in pts /\ to == cn).
Variable ptag : ttag.
(* Precondition -- this is the way one can define multiple send-transitions *)
Variable prec : PStateT -> payload -> Prop.
(* Making sure that the precondition is legit *)
Hypothesis pn_prec_safe :
forall this to s m,
HPn this to -> prec s m -> cohMsg (Msg (TMsg ptag m) this to true) s.1.
Variable commit : bool.
Definition pn_step (this to : nid) (d : dstatelet)
(msg : seq nat)
(pf : pn_safe this to d msg) :=
let C := pn_safe_coh pf in
let s := getStP C (pn_this_in (proj1 pf)) in
let l := getStL C (pn_this_in (proj1 pf)) in
Some (mkLocal (pstep_send s l commit)).

Lemma pn_safe_def this to d msg :
pn_safe this to d msg <->
exists b pf, @pn_step this to d msg pf = Some b.