Proof using.
intros.
destruct (find (fun e' => andb (if clientId_eq_dec (eClient e') (eClient e) then true else false)
(eId e <=? eId e')) es) eqn:?.
- left. find_apply_lem_hyp find_some.
break_if; repeat (break_and; do_bool); try congruence.
intuition eauto using deduplicate_log_snoc_drop.
- right.
match goal with
| |- _ /\ ?P =>
assert P; [|intuition; eauto using deduplicate_log_snoc_split]
end.
intros.
find_eapply_lem_hyp find_none; eauto.
simpl in *. break_if; repeat (do_bool; intuition); try congruence.
Qed.

(* Specifications: *)
(* FIXME: move to StructTact *)
Lemma assoc_None :
forall K V K_eq_dec (l : list (K * V)) k v,
assoc K_eq_dec l k = None ->
In (k, v) l ->
False.