Proof using cci vci cei rri.
intros net H.
pattern net.
apply lower_prop; auto.
clear H net.
intros.
repeat match goal with
| [ H : _ |- _ ] => rewrite deghost_spec in H
end.
eapply candidate_entries_lowered';
eauto using candidate_entries_invariant, votes_correct_invariant, cronies_correct_invariant.
Qed.
Definition CandidateEntriesLowered_rvr net e p :=
In p (nwPackets net) ->
pBody p = RequestVoteReply (eTerm e) true ->
currentTerm (nwState net (pDst p)) = eTerm e ->
wonElection (dedup name_eq_dec (pSrc p :: votesReceived (nwState net (pDst p)))) = true ->
type (nwState net (pDst p)) <> Candidate.

(* Specifications: *)
Lemma deghost_packet_exists :
forall net p,
In p (nwPackets (deghost net)) ->
exists (q : packet (params := raft_refined_multi_params (raft_params := raft_params))),
In q (nwPackets net) /\ p = deghost_packet q.