(** The [simpl_alist] tactic rewrites association lists so that they
    are in the normal form described above.  Similar to the [simpl]
    tactic, we define "[in *]" and "[in H]" variants of the tactic. *)

Ltac simpl_alist :=
  autorewrite with rewr_list rewr_map rewr_dom.

Lemma alist_ind : forall (A : Type) (P : list (X.t * A) -> Type), (P nil) -> (forall x a xs, P xs -> P (x ~ a ++ xs)) -> (forall xs, P xs).