Proof using.
induction l; intros; simpl in *.
- rewrite get_set_diff by auto. auto.
- repeat break_match; simpl in *; eauto.
+ do_bool. destruct (clientId_eq_dec (eClient a) k); subst; simpl in *.
* rewrite assoc_set_assoc_set_same. auto.
* erewrite assoc_a_equiv; [|apply log_to_ks'_a_equiv;
apply assoc_set_assoc_set_diff]; eauto.
+ do_bool. destruct (clientId_eq_dec (eClient a) k); subst; simpl in *.
* rewrite assoc_set_assoc_set_same. auto.
* rewrite assoc_default_assoc_set_diff in *; auto; omega.
+ do_bool. destruct (clientId_eq_dec (eClient a) k); subst; simpl in *.
* erewrite <- assoc_set_assoc_set_same; eauto.
* rewrite assoc_default_assoc_set_diff in *; auto; omega.
Qed.

Lemma log_to_ks'_assoc_default_set_diff :
forall l ks k v k',
k <> k' ->
assoc_default clientId_eq_dec
(log_to_ks' l (assoc_set clientId_eq_dec ks k v)) k' 0 =
assoc_default clientId_eq_dec
(log_to_ks' l ks) k' 0.