Section GenericQuerySendTransitions.
Definition Hn this to := this \in nodes /\ to \in nodes.
Definition mkLocal (q : qstate) := st :-> q.
(* Send tag *)
Variable stag : nat.
(* Generic precondition *)
Variable prec : qstate -> nid -> seq nat -> Prop.
(* Making sure that the precondition is legit *)
Definition prec_safe :=
forall this to q m, Hn this to -> prec q to m ->
cohMsg (Msg (TMsg stag m) this to true).
Hypothesis psafe : prec_safe.
(* Generic send-safety *)
Definition send_safe (this n : nid)
(d : dstatelet) (msg : seq nat) :=
Hn this n /\ exists (C : coh d), prec (getSt this C) n msg.

(* Specifications: *)
Lemma send_safe_coh this to d m : send_safe this to d m -> coh d.
Lemma send_safe_def this to d msg :
send_safe this to d msg <->
exists b pf, @send_step this to d msg pf = Some b.