Proof using.
intros.
unfold handleMessage in *.
break_match; repeat break_let; repeat find_inversion;
[eapply_prop raft_net_invariant_request_vote'|
eapply_prop raft_net_invariant_request_vote_reply'|
eapply_prop raft_net_invariant_append_entries'|
eapply_prop raft_net_invariant_append_entries_reply']; eauto;
unfold send_packets in *; simpl in *; intros; find_apply_hyp_hyp; intuition.
Qed.

Lemma raft_invariant_handle_input' P :
forall h inp net st' ps' out d l,
raft_net_invariant_timeout' P ->
raft_net_invariant_client_request' P ->
handleInput h inp (nwState net h) = (out, d, l) ->
P net ->
raft_intermediate_reachable net ->
raft_intermediate_reachable (mkNetwork ps' st') ->
(forall h', st' h' = update name_eq_dec (nwState net) h d h') ->
(forall p', In p' ps' -> In p' (nwPackets net) \/
In p' (send_packets h l)) ->
P (mkNetwork ps' st').