Proof using.
intros l1; elim l1; simpl in |- *; auto.
intros (a1, ll1) l H l2 H0 H1 H2; apply unique_key_cons; auto.
intros b; red in |- *; intros H3.
case in_app_or with (1 := H3).
change (~ In (a1, b) l) in |- *; apply unique_key_in with (1 := H0).
intros H4; apply (H2 a1 ll1 b); auto.
apply H; auto.
apply unique_key_inv with (1 := H0); auto.
intros a b c H3 H4; apply (H2 a b c); auto.
Qed.

(* The list of keys is unique *)
Theorem unique_key_ulist :
forall l : list (A * B), unique_key l -> ulist (map (fst (B:=_)) l).