Proof using.
unfold a_equiv in *.
intros. repeat find_higher_order_rewrite.
auto.
Qed.
Ltac assoc_destruct :=
match goal with
| [ |- context [assoc (assoc_set _ ?k0' _) ?k0 ] ] =>
destruct (K_eq_dec k0 k0'); [subst k0'; rewrite get_set_same with (k := k0)|
rewrite get_set_diff with (k' := k0) by auto]
end.
Ltac assoc_rewrite :=
match goal with
| [  |- context [assoc (assoc_set _ ?k0' _) ?k0 ] ] =>
first [rewrite get_set_same with (k := k0) by auto |
rewrite get_set_diff with (k' := k0) by auto ]
end.

(* Specifications: *)
Lemma assoc_set_assoc_set_diff :
forall l (k : K) (v : V) k' v',
k <> k' ->
a_equiv (assoc_set (assoc_set l k v) k' v')
(assoc_set (assoc_set l k' v') k v).