Proof using rri.
unfold CandidateEntriesLowered_rvr, CandidateEntries, votes_correct, cronies_correct.
intros. break_and.
rewrite deghost_spec.
find_apply_lem_hyp deghost_packet_exists.
find_apply_lem_hyp deghost_packet_exists.
break_exists.  break_and. subst.
eapply_prop_hyp votes_nw pBody. concludes.
eapply_prop_hyp candidateEntries_nw_invariant pBody; auto.
find_insterU. conclude_using eauto.
unfold candidateEntries in *.
break_exists. break_and.
match goal with
| H : wonElection _ = _ |- _ =>
eapply wonElection_one_in_common in H; [|clear H; eauto]
end.
break_exists. break_and.
repeat match goal with
| [ H : _ |- _ ] => rewrite deghost_spec in H
end.
simpl in *.
break_or_hyp.
- apply_prop_hyp cronies_votes In.
assert (pDst x = x1) by (eapply_prop one_vote_per_term; eauto).
subst. auto.
- intro.
assert (pDst x = x1).
{ eapply_prop one_vote_per_term;
eapply_prop cronies_votes.
- eapply_prop votes_received_cronies; eauto.
- repeat find_reverse_rewrite. auto.
}
subst.
concludes. contradiction.
Qed.

(* Specifications: *)
Lemma candidate_entries_lowered_nw_rvr :
forall net,
raft_intermediate_reachable net ->
forall p' p e t li pli plt es lc,
pBody p = AppendEntries t li pli plt es lc ->
In p (nwPackets net) ->
In e es ->
CandidateEntriesLowered_rvr net e p'.