Proof using.
unfold logs_sorted. intuition.
Qed.
Ltac use_nw_invariant_keep :=
match goal with
| [ H : forall _ _ _ _ _ _ _, In _ _ -> Net.pBody _ = _ -> _,
H' : Net.pBody ?p = AppendEntries _ _ _ _ ?xs _ |- _ ] =>
copy_apply H H'; clear H; intuition
end.
Ltac use_leader_sublog :=
match goal with
| [ H : forall _ _ _ _ _ _  _ _ _, type _ = _ -> In _ _ -> Net.pBody _ = _ -> _,
H' : Net.pBody ?p = AppendEntries _ _ _ _ ?xs _ |- _ ] =>
eapply H in H'; clear H; eauto; intuition
end.
Ltac pbody_massage :=
match goal with
| H : In ?p _ |- _ =>
match type of H with
| context [ nwPackets _ ] => fail 1
| context [AppendEntries ?t ?lid ?pli ?plt ?e ?lc] =>
assert (Net.pBody p = AppendEntries t lid pli plt e lc) by reflexivity
end
end.

(* Specifications: *)
Lemma client_request_log_matching :
raft_net_invariant_client_request log_matching.