Proof using.
unfold inputs_m.
intros.
simpl.
repeat break_match; auto; discriminate.
Qed.

Lemma PB_net_out_case :
forall dst src m d os d' ms,
PB_net dst src m d = (os, d', ms) ->
(dst = Backup /\ os = [] /\ queue d' = queue d) \/
(dst = Primary /\ os = [] /\ d' = d) \/
(dst = Primary /\ exists h t, queue d = h :: t /\ queue d' = t /\
(let (us, st') := handler h (state d) in
os = [RequestResponse h us] /\ state d' = st')).