(* Assemble a new send-transition for the rich coherence *)
End SendInvWrapper.
Section ReceiveInvWrapper.
Variable rt : receive_trans coh.
Definition receive_stepI: receive_step_t CohI :=
fun this from m d C pf => receive_step rt from m (proj1 C) pf.
Definition R_inv := forall d from this i (C : coh d) m
(pf: this \in nodes p d),
I d (nodes p d) ->
find i (dsoup d) = Some (Msg m from this true) ->
this \in dom (dstate d) ->
msg_wf rt C this from m -> tag m = t_rcv rt ->
let: loc' := receive_step rt from m C pf in
let: s'' := consume_msg (dsoup d) i in
let: f' := upd this loc' (dstate d) in
let: d' := (DStatelet f' s'') in
(forall z, z == this = false -> getLocal z d' = getLocal z d) ->
I d' (nodes p d').
Hypothesis HIstep : R_inv.
Notation msg_wfI := (fun d (C : CohI d) => msg_wf rt (proj1 C)).

(* Specifications: *)
Lemma r_step_cohI :
r_step_coh_t msg_wfI (t_rcv rt) receive_stepI.