Proof using rri.
unfold CandidateEntriesLowered, CandidateEntries, votes_correct, cronies_correct.
intros. break_and.
rewrite deghost_spec.
find_apply_lem_hyp deghost_packet_exists.
break_exists. break_and. subst.
eapply_prop_hyp candidateEntries_nw_invariant In; 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.
intro.
assert (h = x0).
{
eapply_prop one_vote_per_term;
eapply_prop cronies_votes.
- eapply_prop votes_received_cronies; eauto.
- find_reverse_rewrite. auto.
}
subst.
concludes. contradiction.
Qed.

Lemma candidate_entries_lowered_nw :
forall net,
raft_intermediate_reachable net ->
forall h 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 net e h.